mirror of
https://github.com/Divested-Mobile/DivestOS-Build.git
synced 2024-10-01 01:35:54 -04:00
Disable GMS setup page
This commit is contained in:
parent
50d41ce3d8
commit
61d8920ef2
@ -0,0 +1,388 @@
|
||||
From c6832ae47a5c0b3fa6b0862509c4ebae0f1ec08d Mon Sep 17 00:00:00 2001
|
||||
From: Tad <tad@spotco.us>
|
||||
Date: Mon, 23 Jan 2017 16:58:35 -0500
|
||||
Subject: [PATCH] Disable GMS page during setup
|
||||
|
||||
Change-Id: Ic115cdf15ad31f59200f2286d9e3fd6dc0a7810b
|
||||
---
|
||||
.../setupwizard/setup/CMSetupWizardData.java | 6 +-
|
||||
.../setupwizard/setup/GmsAccountPage.java | 322 ---------------------
|
||||
.../setupwizard/ui/SetupWizardActivity.java | 9 -
|
||||
3 files changed, 1 insertion(+), 336 deletions(-)
|
||||
delete mode 100644 src/com/cyanogenmod/setupwizard/setup/GmsAccountPage.java
|
||||
|
||||
diff --git a/src/com/cyanogenmod/setupwizard/setup/CMSetupWizardData.java b/src/com/cyanogenmod/setupwizard/setup/CMSetupWizardData.java
|
||||
index f0f2c6b..5b2792a 100644
|
||||
--- a/src/com/cyanogenmod/setupwizard/setup/CMSetupWizardData.java
|
||||
+++ b/src/com/cyanogenmod/setupwizard/setup/CMSetupWizardData.java
|
||||
@@ -68,11 +68,7 @@ public class CMSetupWizardData extends AbstractSetupData {
|
||||
pages.add(new MobileDataPage(mContext, this)
|
||||
.setHidden(!isSimInserted() || mMobileDataEnabled));
|
||||
}
|
||||
- final boolean hasGMS = SetupWizardUtils.hasGMS(mContext);
|
||||
- if (hasGMS) {
|
||||
- pages.add(new GmsAccountPage(mContext, this));
|
||||
- }
|
||||
- pages.add(new OtherSettingsPage(mContext, this).setHidden(!hasGMS));
|
||||
+ pages.add(new OtherSettingsPage(mContext, this));
|
||||
if (SetupWizardUtils.hasFingerprint(mContext) && SetupWizardUtils.isOwner()) {
|
||||
pages.add(new FingerprintSetupPage(mContext, this));
|
||||
}
|
||||
diff --git a/src/com/cyanogenmod/setupwizard/setup/GmsAccountPage.java b/src/com/cyanogenmod/setupwizard/setup/GmsAccountPage.java
|
||||
deleted file mode 100644
|
||||
index a646997..0000000
|
||||
--- a/src/com/cyanogenmod/setupwizard/setup/GmsAccountPage.java
|
||||
+++ /dev/null
|
||||
@@ -1,322 +0,0 @@
|
||||
-/*
|
||||
- * Copyright (C) 2013 The CyanogenMod Project
|
||||
- * Copyright (C) 2017 The LineageOS Project
|
||||
- *
|
||||
- * 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 com.cyanogenmod.setupwizard.setup;
|
||||
-
|
||||
-import android.accounts.AccountManager;
|
||||
-import android.accounts.AccountManagerCallback;
|
||||
-import android.accounts.AccountManagerFuture;
|
||||
-import android.accounts.AuthenticatorException;
|
||||
-import android.accounts.OperationCanceledException;
|
||||
-import android.app.Activity;
|
||||
-import android.app.ActivityOptions;
|
||||
-import android.app.Fragment;
|
||||
-import android.app.FragmentManager;
|
||||
-import android.content.Context;
|
||||
-import android.content.Intent;
|
||||
-import android.content.pm.PackageManager;
|
||||
-import android.os.Bundle;
|
||||
-import android.service.persistentdata.PersistentDataBlockManager;
|
||||
-import android.util.Log;
|
||||
-
|
||||
-import com.android.setupwizardlib.util.ResultCodes;
|
||||
-import com.cyanogenmod.setupwizard.R;
|
||||
-import com.cyanogenmod.setupwizard.SetupWizardApp;
|
||||
-import com.cyanogenmod.setupwizard.ui.LoadingFragment;
|
||||
-import com.cyanogenmod.setupwizard.util.SetupWizardUtils;
|
||||
-
|
||||
-import java.io.IOException;
|
||||
-
|
||||
-public class GmsAccountPage extends SetupPage {
|
||||
-
|
||||
- public static final String TAG = "GmsAccountPage";
|
||||
-
|
||||
- public static final String ACTION_RESTORE = "com.google.android.setupwizard.RESTORE";
|
||||
- public static final String ACTION_PROGRESS = "com.google.android.setupwizard.PROGRESS";
|
||||
- public static final String ACTION_VENDOR_SETUP = "com.google.android.setupwizard.VENDOR_SETUP";
|
||||
- public static final String RESTORE_ACTION_ID = "mfm_restore_start";
|
||||
- public static final String RESTORE_CHECK_ID = "restore_check";
|
||||
- public static final String FRAGMENT_START_RESTORE =
|
||||
- "com.google.android.setupwizard.account.StartRestoreFragment";
|
||||
- public static final String FRAGMENT_CHECK_RESTORE =
|
||||
- "com.google.android.setupwizard.account.CheckRestoreTokenFragment";
|
||||
-
|
||||
- public static final String EXTRA_AUTH_ACCOUNT = "authAccount";
|
||||
- public static final String EXTRA_RESTORE_ACCOUNT = "restoreAccount";
|
||||
- public static final String EXTRA_RESTORE_TOKEN = "restoreToken";
|
||||
-
|
||||
- private static final String RESTORE_WIZARD_SCRIPT =
|
||||
- "android.resource://com.google.android.setupwizard/xml/wizard_script";
|
||||
-
|
||||
- private Fragment mFragment;
|
||||
-
|
||||
- public GmsAccountPage(final Context context, SetupDataCallbacks callbacks) {
|
||||
- super(context, callbacks);
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public Fragment getFragment(FragmentManager fragmentManager, int action) {
|
||||
- mFragment = fragmentManager.findFragmentByTag(getKey());
|
||||
- if (mFragment == null) {
|
||||
- Bundle args = new Bundle();
|
||||
- args.putString(Page.KEY_PAGE_ARGUMENT, getKey());
|
||||
- args.putInt(Page.KEY_PAGE_ACTION, action);
|
||||
- mFragment = new LoadingFragment();
|
||||
- mFragment.setArguments(args);
|
||||
- }
|
||||
- return mFragment;
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public String getKey() {
|
||||
- return TAG;
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public int getTitleResId() {
|
||||
- return R.string.loading;
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public int getIconResId() {
|
||||
- return -1;
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public int getNextButtonTitleResId() {
|
||||
- return R.string.skip;
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public void doLoadAction(FragmentManager fragmentManager, int action) {
|
||||
- if (action == Page.ACTION_PREVIOUS) {
|
||||
- getCallbacks().onPreviousPage();
|
||||
- } else {
|
||||
- super.doLoadAction(fragmentManager, action);
|
||||
- if (!SetupWizardUtils.isNetworkConnected(mContext) && !SetupWizardUtils.frpEnabled(mContext)) {
|
||||
- if (SetupWizardApp.DEBUG) {
|
||||
- Log.d(TAG, "No network, no FRP enforcement, skip GMS account");
|
||||
- }
|
||||
- getCallbacks().onNextPage();
|
||||
- } else if (!SetupWizardUtils.accountExists(mContext, SetupWizardApp.ACCOUNT_TYPE_GMS)) {
|
||||
- launchGmsAccountSetup();
|
||||
- } else {
|
||||
- // This can happen if the user goes from setup -> restore, but chooses to set
|
||||
- // their device up as "new". Thus we need to not re-prompt this entire flow,
|
||||
- // skip ahead. CYNGNOS-2459
|
||||
- if (SetupWizardApp.DEBUG) {
|
||||
- Log.d(TAG, "Google account already setup, skip gms setup");
|
||||
- }
|
||||
- setHidden(true);
|
||||
- getCallbacks().onNextPage();
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
- if (SetupWizardApp.DEBUG) {
|
||||
- Log.d(TAG, "Received activity result from requestCode " + requestCode
|
||||
- + " with a resultCode of " + resultCode);
|
||||
- if (data != null) {
|
||||
- Bundle extras = data.getExtras();
|
||||
- Log.d(TAG, "Within the activity result there were extras:");
|
||||
- for (String extra : extras.keySet()) {
|
||||
- Log.d(TAG, "The key " + extra + " has a value of " + extras.get(extra));
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- if (requestCode == SetupWizardApp.REQUEST_CODE_SETUP_GMS &&
|
||||
- resultCode == ResultCodes.RESULT_SKIP) {
|
||||
- launchGmsVendorSetup();
|
||||
- } else if (requestCode == SetupWizardApp.REQUEST_CODE_SETUP_GMS && data != null) {
|
||||
- if (SetupWizardUtils.isOwner() && resultCode == Activity.RESULT_OK) {
|
||||
-
|
||||
- // If we don't have a restore token and a restore account, then we need to
|
||||
- // prompt with the restore picker from googles setup wizard so the user
|
||||
- // can select what device they would like to restore from. Otherwise,
|
||||
- // we're coming from a Tap&Go scenario and we should just restore.
|
||||
- boolean restorePicker = !data.hasExtra(EXTRA_RESTORE_TOKEN)
|
||||
- && !data.hasExtra(EXTRA_RESTORE_ACCOUNT) &&
|
||||
- data.hasExtra(EXTRA_AUTH_ACCOUNT);
|
||||
-
|
||||
- launchGmsRestorePage(restorePicker);
|
||||
- } else {
|
||||
- handleResult(requestCode, resultCode);
|
||||
- }
|
||||
- } else {
|
||||
- if (requestCode == SetupWizardApp.REQUEST_CODE_RESTORE_GMS) {
|
||||
- setHidden(true);
|
||||
- }
|
||||
- handleResult(requestCode, resultCode);
|
||||
- }
|
||||
- return true;
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public boolean doNextAction() {
|
||||
- final boolean canSkip = canSkip();
|
||||
- // return true to force this page to handle the next action.
|
||||
- return !canSkip;
|
||||
- }
|
||||
-
|
||||
- @Override
|
||||
- public void onFinishSetup() {
|
||||
-
|
||||
- }
|
||||
-
|
||||
- private void handleResult(int requestCode, int resultCode) {
|
||||
- if (resultCode == Activity.RESULT_CANCELED) {
|
||||
- getCallbacks().onPreviousPage();
|
||||
- } else {
|
||||
- if (resultCode == Activity.RESULT_OK) {
|
||||
- getCallbacks().onNextPage();
|
||||
- } else {
|
||||
- if (canSkip()) {
|
||||
- getCallbacks().onNextPage();
|
||||
- } else {
|
||||
- getCallbacks().onPreviousPage();
|
||||
- }
|
||||
- }
|
||||
- if (SetupWizardUtils.accountExists(mContext, SetupWizardApp.ACCOUNT_TYPE_GMS)) {
|
||||
- setHidden(true);
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- private void launchGmsRestorePage(boolean restorePicker) {
|
||||
- if (SetupWizardApp.DEBUG) {
|
||||
- Log.d(TAG, "Launching gms restore page with restorePicker " + restorePicker);
|
||||
- }
|
||||
- try {
|
||||
- // GMS can disable this after logging in sometimes
|
||||
- if (SetupWizardUtils.enableGMSSetupWizard(mContext)) {
|
||||
- Intent intent = new Intent(ACTION_PROGRESS);
|
||||
- if (!restorePicker) {
|
||||
- intent.setAction(ACTION_PROGRESS);
|
||||
- intent.putExtra(SetupWizardApp.EXTRA_FRAGMENT, FRAGMENT_START_RESTORE);
|
||||
- intent.putExtra(SetupWizardApp.EXTRA_ACTION_ID, RESTORE_ACTION_ID);
|
||||
- } else {
|
||||
- intent.setAction(ACTION_PROGRESS);
|
||||
- intent.putExtra(SetupWizardApp.EXTRA_ACTION_ID, RESTORE_CHECK_ID);
|
||||
- intent.putExtra(SetupWizardApp.EXTRA_FRAGMENT, FRAGMENT_CHECK_RESTORE);
|
||||
- }
|
||||
- intent.putExtra(SetupWizardApp.EXTRA_ALLOW_SKIP, true);
|
||||
- intent.putExtra(SetupWizardApp.EXTRA_USE_IMMERSIVE, true);
|
||||
- intent.putExtra(SetupWizardApp.EXTRA_FIRST_RUN, true);
|
||||
- intent.putExtra(SetupWizardApp.EXTRA_THEME, SetupWizardApp.EXTRA_MATERIAL_LIGHT);
|
||||
- // XXX: Fool G's setup wizard into thinking it is their setup wizard.
|
||||
- // This is necessary to get the material theme on the restore page.
|
||||
- intent.putExtra("scriptUri", RESTORE_WIZARD_SCRIPT);
|
||||
- ActivityOptions options =
|
||||
- ActivityOptions.makeCustomAnimation(mContext,
|
||||
- android.R.anim.fade_in,
|
||||
- android.R.anim.fade_out);
|
||||
- mFragment.startActivityForResult(
|
||||
- intent,
|
||||
- SetupWizardApp.REQUEST_CODE_RESTORE_GMS, options.toBundle());
|
||||
- return;
|
||||
- }
|
||||
- } catch (Exception e) {
|
||||
- e.printStackTrace();
|
||||
- // XXX: In open source, we don't know what gms version a user has.
|
||||
- // Bail if the restore activity is not found.
|
||||
- getCallbacks().onNextPage();
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- private void launchGmsVendorSetup() {
|
||||
- if (SetupWizardApp.DEBUG) {
|
||||
- Log.d(TAG, "Launching gms vendor setup page");
|
||||
- }
|
||||
- try {
|
||||
- Intent intent = new Intent(ACTION_VENDOR_SETUP);
|
||||
- intent.setPackage(SetupWizardUtils.GOOGLE_SETUPWIZARD_PACKAGE);
|
||||
- intent.putExtra(SetupWizardApp.EXTRA_ALLOW_SKIP, true);
|
||||
- intent.putExtra(SetupWizardApp.EXTRA_USE_IMMERSIVE, true);
|
||||
- intent.putExtra(SetupWizardApp.EXTRA_FIRST_RUN, true);
|
||||
- intent.putExtra(SetupWizardApp.EXTRA_THEME, SetupWizardApp.EXTRA_MATERIAL_LIGHT);
|
||||
- ActivityOptions options =
|
||||
- ActivityOptions.makeCustomAnimation(mContext,
|
||||
- android.R.anim.fade_in,
|
||||
- android.R.anim.fade_out);
|
||||
- mFragment.startActivityForResult(
|
||||
- intent,
|
||||
- SetupWizardApp.REQUEST_CODE_VENDOR_SETUP_GMS, options.toBundle());
|
||||
- return;
|
||||
- } catch (Exception e) {
|
||||
- // Move on if the vendor setup activity is not found.
|
||||
- getCallbacks().onNextPage();
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- public boolean canSkip() {
|
||||
- final PersistentDataBlockManager pdbManager = (PersistentDataBlockManager)
|
||||
- mContext.getSystemService(Context.PERSISTENT_DATA_BLOCK_SERVICE);
|
||||
- return pdbManager == null
|
||||
- || pdbManager.getDataBlockSize() == 0
|
||||
- || pdbManager.getOemUnlockEnabled();
|
||||
- }
|
||||
-
|
||||
- private void launchGmsAccountSetup() {
|
||||
- if (SetupWizardApp.DEBUG) {
|
||||
- Log.d(TAG, "Launching gms account page");
|
||||
- }
|
||||
- Bundle bundle = new Bundle();
|
||||
- bundle.putBoolean(SetupWizardApp.EXTRA_FIRST_RUN, true);
|
||||
- bundle.putBoolean(SetupWizardApp.EXTRA_ALLOW_SKIP, true);
|
||||
- bundle.putBoolean(SetupWizardApp.EXTRA_USE_IMMERSIVE, true);
|
||||
- bundle.putBoolean(SetupWizardApp.EXTRA_SUPRESS_D2D_SETUP, !mContext.getPackageManager()
|
||||
- .hasSystemFeature(PackageManager.FEATURE_NFC));
|
||||
-
|
||||
- AccountManager
|
||||
- .get(mContext).addAccount(SetupWizardApp.ACCOUNT_TYPE_GMS, null, null,
|
||||
- bundle, null, new AccountManagerCallback<Bundle>() {
|
||||
- @Override
|
||||
- public void run(AccountManagerFuture<Bundle> future) {
|
||||
- boolean error = false;
|
||||
- try {
|
||||
- Bundle result = future.getResult();
|
||||
- Intent intent = result
|
||||
- .getParcelable(AccountManager.KEY_INTENT);
|
||||
- ActivityOptions options =
|
||||
- ActivityOptions.makeCustomAnimation(mContext,
|
||||
- android.R.anim.fade_in,
|
||||
- android.R.anim.fade_out);
|
||||
- mFragment.startActivityForResult(intent,
|
||||
- SetupWizardApp.REQUEST_CODE_SETUP_GMS, options.toBundle());
|
||||
- } catch (OperationCanceledException e) {
|
||||
- error = true;
|
||||
- } catch (IOException e) {
|
||||
- error = true;
|
||||
- } catch (AuthenticatorException e) {
|
||||
- Log.e(TAG, "Error launching gms account", e);
|
||||
- error = true;
|
||||
- } finally {
|
||||
- if (error && getCallbacks().
|
||||
- isCurrentPage(GmsAccountPage.this)) {
|
||||
- if (canSkip()) {
|
||||
- getCallbacks().onNextPage();
|
||||
- } else {
|
||||
- getCallbacks().onPreviousPage();
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- }, null);
|
||||
- }
|
||||
-}
|
||||
diff --git a/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java b/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java
|
||||
index 6cc651a..c027c06 100644
|
||||
--- a/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java
|
||||
+++ b/src/com/cyanogenmod/setupwizard/ui/SetupWizardActivity.java
|
||||
@@ -46,7 +46,6 @@ import com.android.setupwizardlib.util.SystemBarHelper;
|
||||
import com.cyanogenmod.setupwizard.R;
|
||||
import com.cyanogenmod.setupwizard.SetupWizardApp;
|
||||
import com.cyanogenmod.setupwizard.setup.CMSetupWizardData;
|
||||
-import com.cyanogenmod.setupwizard.setup.GmsAccountPage;
|
||||
import com.cyanogenmod.setupwizard.setup.Page;
|
||||
import com.cyanogenmod.setupwizard.setup.SetupDataCallbacks;
|
||||
import com.cyanogenmod.setupwizard.util.EnableAccessibilityController;
|
||||
@@ -143,14 +142,6 @@ public class SetupWizardActivity extends Activity implements SetupDataCallbacks,
|
||||
Settings.Secure.BACKUP_AUTO_RESTORE, 0) == 1) ||
|
||||
(Settings.Secure.getInt(getContentResolver(),
|
||||
Settings.Secure.BACKUP_ENABLED, 0) == 1);
|
||||
- if (TextUtils.equals(lastPage, GmsAccountPage.TAG) && backupEnabled) {
|
||||
- // We probably already restored, skip ahead!
|
||||
- mSetupData.setCurrentPage(mSetupData.getNextPage(lastPage).getKey());
|
||||
- } else {
|
||||
- // else just restore
|
||||
- mSetupData.setCurrentPage(sharedPreferences.getString(KEY_LAST_PAGE_TAG,
|
||||
- mSetupData.getCurrentPage().getKey()));
|
||||
- }
|
||||
Page page = mSetupData.getCurrentPage();
|
||||
page.doLoadAction(getFragmentManager(), Page.ACTION_NEXT);
|
||||
}
|
||||
--
|
||||
2.9.3
|
||||
|
@ -9,7 +9,7 @@
|
||||
#rm -rf build vendor/cm device/motorola/clark device/oneplus/bacon device/lge/mako kernel/lge/mako kernel/oneplus/msm8974 kernel/motorola/msm8992 packages/apps/Settings frameworks/base build system/core external/sqlite packages/apps/Nfc packages/apps/Settings packages/apps/FDroid packages/apps/FDroidPrivilegedExtension packages/apps/GmsCore packages/apps/GsfProxy packages/apps/FakeStore kernel/lge/hammerhead kernel/moto/shamu bootable/recovery packages/apps/CMParts packages/apps/SetupWizard
|
||||
|
||||
#Start a build
|
||||
#repo sync -j24 --force-sync && sh ../../Scripts/LAOS-14.1_Patches.sh && source device/motorola/clark/setup-makefiles.sh && source build/envsetup.sh && export WITH_SU=true && export ANDROID_HOME="/home/tad/Android/SDK" && export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m" && brunch clark && brunch mako && export OTA_PACKAGE_SIGNING_KEY=../../Signing_Keys/releasekey && export SIGNING_KEY_DIR=../../Signing_Keys && brunch bacon && brunch thor
|
||||
#repo sync -j24 --force-sync && sh ../../Scripts/LAOS-14.1_Patches.sh && source device/motorola/clark/setup-makefiles.sh && source build/envsetup.sh && export WITH_SU=true && export ANDROID_HOME="/home/tad/Android/SDK" && export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m" && brunch mako && export OTA_PACKAGE_SIGNING_KEY=../../Signing_Keys/releasekey && export SIGNING_KEY_DIR=../../Signing_Keys && brunch clark && brunch bacon && brunch thor
|
||||
|
||||
#
|
||||
#START OF PREPRATION
|
||||
@ -106,9 +106,11 @@ patch -p1 < $patches"android_vendor_cm/0002-Monochromium.patch" #Add Chromium we
|
||||
enter "packages/apps/CMParts"
|
||||
git fetch https://review.lineageos.org/LineageOS/android_packages_apps_CMParts refs/changes/15/113415/11 && git cherry-pick FETCH_HEAD #Network Traffic
|
||||
patch -p1 < $patches"android_packages_apps_CMParts/0001-Remove_Analytics.patch" #Remove analytics
|
||||
rm res/xml/parts_catalog.xml.orig res/values/strings.xml.orig
|
||||
|
||||
enter "packages/apps/SetupWizard"
|
||||
patch -p1 < $patches"android_packages_apps_SetupWizard/0001-Remove_Analytics.patch" #Remove analytics
|
||||
patch -p1 < $patches"android_packages_apps_SetupWizard/0002-No_GMS.patch" #Disable GMS page
|
||||
|
||||
enter "frameworks/base"
|
||||
git fetch https://review.lineageos.org/LineageOS/android_frameworks_base refs/changes/75/151975/7 && git cherry-pick FETCH_HEAD #Network Traffic
|
||||
|
Loading…
Reference in New Issue
Block a user