Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 54b9d607 authored by Tsung-Mao Fang's avatar Tsung-Mao Fang
Browse files

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
parent fce8565e
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -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();
    }
}
+13 −0
Original line number Diff line number Diff line
@@ -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;
    }
+2 −0
Original line number Diff line number Diff line
@@ -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);