Create an interface to access the two pane state

Create an new interface in the embedding provider,
this interface tells if settings app is in two pane or not.

To access the activity in the content provider, we need to store
the activity reference in the app application layer.

Test: See if two pane state is correct.
Bug: 203763572
Change-Id: Iae2245b84af2683d932f1900df9959dad98370d7
This commit is contained in:
Tsung-Mao Fang
2021-10-21 21:24:49 +08:00
parent fce8565e5e
commit 54b9d60783
3 changed files with 28 additions and 0 deletions

View File

@@ -16,13 +16,18 @@
package com.android.settings;
import android.app.Activity;
import android.app.Application;
import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
import java.lang.ref.WeakReference;
/** Settings application which sets up activity embedding rules for the large screen device. */
public class SettingsApplication extends Application {
private WeakReference<Activity> mHomeActivity = new WeakReference<>(null);
@Override
public void onCreate() {
super.onCreate();
@@ -31,4 +36,12 @@ public class SettingsApplication extends Application {
new ActivityEmbeddingRulesController(this);
controller.initRules();
}
public void setHomeActivity(Activity homeActivity) {
mHomeActivity = new WeakReference<>(homeActivity);
}
public Activity getHomeActivity() {
return mHomeActivity.get();
}
}

View File

@@ -16,6 +16,7 @@
package com.android.settings.activityembedding;
import android.app.Activity;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
@@ -23,13 +24,17 @@ import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import com.android.settings.SettingsApplication;
/**
* A content provider for querying the state of activity embedding feature
*/
public class ActivityEmbeddingProvider extends ContentProvider {
private static final String METHOD_IS_EMBEDDING_ACTIVITY_ENABLED = "isEmbeddingActivityEnabled";
private static final String METHOD_IS_IN_SETTINGS_TWO_PANE = "isInSettingsTwoPane";
private static final String EXTRA_ENABLED_STATE = "enabled_state";
private static final String EXTRA_TWO_PANE_STATE = "two_pane_state";
@Override
public boolean onCreate() {
@@ -43,6 +48,14 @@ public class ActivityEmbeddingProvider extends ContentProvider {
bundle.putBoolean(EXTRA_ENABLED_STATE,
ActivityEmbeddingUtils.isEmbeddingActivityEnabled(getContext()));
return bundle;
} else if (TextUtils.equals(method, METHOD_IS_IN_SETTINGS_TWO_PANE)) {
final Activity homeActivity =
((SettingsApplication) getContext().getApplicationContext()).getHomeActivity();
final Bundle bundle = new Bundle();
bundle.putBoolean(EXTRA_TWO_PANE_STATE,
homeActivity == null ? false
: ActivityEmbeddingUtils.isTwoPaneResolution(homeActivity));
return bundle;
}
return null;
}

View File

@@ -42,6 +42,7 @@ import androidx.fragment.app.FragmentTransaction;
import com.android.settings.R;
import com.android.settings.Settings;
import com.android.settings.SettingsActivity;
import com.android.settings.SettingsApplication;
import com.android.settings.Utils;
import com.android.settings.accounts.AvatarViewMixin;
import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
@@ -95,6 +96,7 @@ public class SettingsHomepageActivity extends FragmentActivity implements
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((SettingsApplication) getApplication()).setHomeActivity(this);
setContentView(R.layout.settings_homepage_container);
final View appBar = findViewById(R.id.app_bar_container);