mirror of
https://github.com/YTVanced/VancedMicroG
synced 2024-11-28 06:03:00 +00:00
Add dummy TapAndPay service
This commit is contained in:
parent
ee8e5427c4
commit
6ba9bbb03b
4 changed files with 181 additions and 11 deletions
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!--
|
<!--
|
||||||
~ Copyright (C) 2013-2017 microG Project Team
|
~ Copyright (C) 2013-2019 microG Project Team
|
||||||
~
|
~
|
||||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
~ you may not use this file except in compliance with the License.
|
~ you may not use this file except in compliance with the License.
|
||||||
|
@ -90,7 +90,9 @@
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
|
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
|
||||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||||
<uses-permission android:name="android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST" tools:ignore="ProtectedPermissions"/>
|
<uses-permission
|
||||||
|
android:name="android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST"
|
||||||
|
tools:ignore="ProtectedPermissions"/>
|
||||||
|
|
||||||
<uses-sdk tools:overrideLibrary="
|
<uses-sdk tools:overrideLibrary="
|
||||||
com.takisoft.fix.support.v7.preference,
|
com.takisoft.fix.support.v7.preference,
|
||||||
|
@ -100,14 +102,14 @@
|
||||||
android.arch.lifecycle.viewmodel,
|
android.arch.lifecycle.viewmodel,
|
||||||
android.arch.core,
|
android.arch.core,
|
||||||
android.support.v7.mediarouter,
|
android.support.v7.mediarouter,
|
||||||
android.support.v7.palette" />
|
android.support.v7.palette"/>
|
||||||
|
|
||||||
<application
|
<application
|
||||||
|
android:name="android.support.multidex.MultiDexApplication"
|
||||||
android:allowBackup="false"
|
android:allowBackup="false"
|
||||||
android:extractNativeLibs="false"
|
android:extractNativeLibs="false"
|
||||||
android:icon="@mipmap/ic_core_service_app"
|
android:icon="@mipmap/ic_core_service_app"
|
||||||
android:label="@string/gms_app_name"
|
android:label="@string/gms_app_name">
|
||||||
android:name="android.support.multidex.MultiDexApplication">
|
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="fake-signature"
|
android:name="fake-signature"
|
||||||
android:value="@string/fake_signature"/>
|
android:value="@string/fake_signature"/>
|
||||||
|
@ -405,7 +407,7 @@
|
||||||
|
|
||||||
<service android:name="com.google.android.gms.cast.media.CastMediaRouteProviderService">
|
<service android:name="com.google.android.gms.cast.media.CastMediaRouteProviderService">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.media.MediaRouteProviderService" />
|
<action android:name="android.media.MediaRouteProviderService"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
|
@ -421,8 +423,8 @@
|
||||||
<activity
|
<activity
|
||||||
android:name="org.microg.gms.ui.SettingsActivity"
|
android:name="org.microg.gms.ui.SettingsActivity"
|
||||||
android:icon="@mipmap/ic_microg_settings"
|
android:icon="@mipmap/ic_microg_settings"
|
||||||
android:roundIcon="@mipmap/ic_microg_settings"
|
|
||||||
android:label="@string/gms_settings_name"
|
android:label="@string/gms_settings_name"
|
||||||
|
android:roundIcon="@mipmap/ic_microg_settings"
|
||||||
android:theme="@style/Theme.AppCompat.Settings.Dashboard">
|
android:theme="@style/Theme.AppCompat.Settings.Dashboard">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN"/>
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
|
@ -438,16 +440,23 @@
|
||||||
<!-- microG Settings embedded in System Settings on SDK 23 and newer -->
|
<!-- microG Settings embedded in System Settings on SDK 23 and newer -->
|
||||||
<activity-alias
|
<activity-alias
|
||||||
android:name="org.microg.gms.ui.SettingsActivityLink"
|
android:name="org.microg.gms.ui.SettingsActivityLink"
|
||||||
android:targetActivity="org.microg.gms.ui.SettingsActivity"
|
|
||||||
android:icon="@drawable/microg_light_color_24"
|
android:icon="@drawable/microg_light_color_24"
|
||||||
android:label="@string/gms_settings_name"
|
android:label="@string/gms_settings_name"
|
||||||
|
android:targetActivity="org.microg.gms.ui.SettingsActivity"
|
||||||
android:theme="@style/Theme.AppCompat.Settings.Dashboard">
|
android:theme="@style/Theme.AppCompat.Settings.Dashboard">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="com.android.settings.action.EXTRA_SETTINGS"/>
|
<action android:name="com.android.settings.action.EXTRA_SETTINGS"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
<meta-data android:name="com.android.settings.category" android:value="com.android.settings.category.device"/>
|
|
||||||
<meta-data android:name="com.android.settings.icon" android:resource="@drawable/microg_light_color_24"/>
|
<meta-data
|
||||||
<meta-data android:name="com.android.settings.summary" android:resource="@string/gms_settings_summary"/>
|
android:name="com.android.settings.category"
|
||||||
|
android:value="com.android.settings.category.device"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.android.settings.icon"
|
||||||
|
android:resource="@drawable/microg_light_color_24"/>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.android.settings.summary"
|
||||||
|
android:resource="@string/gms_settings_summary"/>
|
||||||
</activity-alias>
|
</activity-alias>
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
|
@ -627,6 +636,11 @@
|
||||||
<action android:name="com.google.android.gms.wallet.service.BIND"/>
|
<action android:name="com.google.android.gms.wallet.service.BIND"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</service>
|
</service>
|
||||||
|
<service android:name="org.microg.gms.tapandpay.TapAndPayService">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="com.google.android.gms.tapandpay.service.BIND"/>
|
||||||
|
</intent-filter>
|
||||||
|
</service>
|
||||||
|
|
||||||
<service android:name="org.microg.gms.cast.CastDeviceControllerService">
|
<service android:name="org.microg.gms.cast.CastDeviceControllerService">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2019 microG Project Team
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.microg.gms.tapandpay;
|
||||||
|
|
||||||
|
import com.google.android.gms.tapandpay.internal.ITapAndPayService;
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.RemoteException;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
public class TapAndPayImpl extends ITapAndPayService.Stub {
|
||||||
|
private static final String TAG = "GmsTapAndPayImpl";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException {
|
||||||
|
if (super.onTransact(code, data, reply, flags)) return true;
|
||||||
|
Log.d(TAG, "onTransact [unknown]: " + code + ", " + data + ", " + flags);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2019 microG Project Team
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.microg.gms.tapandpay;
|
||||||
|
|
||||||
|
import android.os.RemoteException;
|
||||||
|
|
||||||
|
import com.google.android.gms.common.api.CommonStatusCodes;
|
||||||
|
import com.google.android.gms.common.internal.GetServiceRequest;
|
||||||
|
import com.google.android.gms.common.internal.IGmsCallbacks;
|
||||||
|
|
||||||
|
import org.microg.gms.BaseService;
|
||||||
|
import org.microg.gms.common.GmsService;
|
||||||
|
|
||||||
|
public class TapAndPayService extends BaseService {
|
||||||
|
public TapAndPayService() {
|
||||||
|
super("GmsTapAndPaySvc", GmsService.TAP_AND_PAY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handleServiceRequest(IGmsCallbacks callback, GetServiceRequest request, GmsService service) throws RemoteException {
|
||||||
|
callback.onPostInitComplete(CommonStatusCodes.SUCCESS, new TapAndPayImpl(), null);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,85 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2019 microG Project Team
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.microg.gms.wearable;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.net.Uri;
|
||||||
|
|
||||||
|
import com.google.android.gms.common.api.CommonStatusCodes;
|
||||||
|
import com.google.android.gms.common.data.DataHolder;
|
||||||
|
import com.google.android.gms.wearable.Node;
|
||||||
|
import com.google.android.gms.wearable.WearableStatusCodes;
|
||||||
|
import com.google.android.gms.wearable.internal.NodeParcelable;
|
||||||
|
|
||||||
|
import org.microg.gms.common.PackageUtils;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class CapabilityManager {
|
||||||
|
private static final Uri ROOT = Uri.parse("wear:/capabilities/");
|
||||||
|
private final Context context;
|
||||||
|
private final WearableImpl wearable;
|
||||||
|
private final String packageName;
|
||||||
|
|
||||||
|
private Set<String> capabilities = new HashSet<String>();
|
||||||
|
|
||||||
|
public CapabilityManager(Context context, WearableImpl wearable, String packageName) {
|
||||||
|
this.context = context;
|
||||||
|
this.wearable = wearable;
|
||||||
|
this.packageName = packageName;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Uri buildCapabilityUri(String capability, boolean withAuthority) {
|
||||||
|
Uri.Builder builder = ROOT.buildUpon();
|
||||||
|
if (withAuthority) builder.authority(wearable.getLocalNodeId());
|
||||||
|
builder.appendPath(packageName);
|
||||||
|
builder.appendPath(PackageUtils.firstSignatureDigest(context, packageName));
|
||||||
|
builder.appendPath(Uri.encode(capability));
|
||||||
|
return builder.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> getNodesForCapability(String capability) {
|
||||||
|
DataHolder dataHolder = wearable.getDataItemsByUriAsHolder(buildCapabilityUri(capability, false), packageName);
|
||||||
|
Set<String> nodes = new HashSet<>();
|
||||||
|
for (int i = 0; i < dataHolder.getCount(); i++) {
|
||||||
|
nodes.add(dataHolder.getString("host", i, 0));
|
||||||
|
}
|
||||||
|
dataHolder.close();
|
||||||
|
return nodes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int add(String capability) {
|
||||||
|
if (this.capabilities.contains(capability)) {
|
||||||
|
return WearableStatusCodes.DUPLICATE_CAPABILITY;
|
||||||
|
}
|
||||||
|
DataItemInternal dataItem = new DataItemInternal(buildCapabilityUri(capability, true));
|
||||||
|
DataItemRecord record = wearable.putDataItem(packageName, PackageUtils.firstSignatureDigest(context, packageName), wearable.getLocalNodeId(), dataItem);
|
||||||
|
this.capabilities.add(capability);
|
||||||
|
wearable.syncRecordToAll(record);
|
||||||
|
return CommonStatusCodes.SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int remove(String capability) {
|
||||||
|
if (!this.capabilities.contains(capability)) {
|
||||||
|
return WearableStatusCodes.UNKNOWN_CAPABILITY;
|
||||||
|
}
|
||||||
|
wearable.deleteDataItems(buildCapabilityUri(capability, true), packageName);
|
||||||
|
capabilities.remove(capability);
|
||||||
|
return CommonStatusCodes.SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue