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

Commit ae812a30 authored by Dmitri Plotnikov's avatar Dmitri Plotnikov Committed by Android (Google) Code Review
Browse files

Merge "Simplify navigation in BatteryStatsViewer" into sc-dev

parents 1ddd959e 37e89c99
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -25,8 +25,7 @@
    <application
        android:theme="@style/Theme"
        android:label="Battery Stats Viewer">
        <activity android:name=".BatteryStatsViewerActivity"
                  android:icon="@mipmap/ic_launcher"
        <activity android:name=".BatteryConsumerPickerActivity"
                  android:label="Battery Stats"
                  android:launchMode="singleTop"
                  android:exported="true">
@@ -36,7 +35,9 @@
            </intent-filter>
        </activity>

        <activity android:name=".BatteryConsumerPickerActivity"
                  android:label="Select a battery consumer"/>
        <activity android:name=".BatteryStatsViewerActivity"
                  android:icon="@mipmap/ic_launcher"
                  android:label="Battery Stats"
                  android:parentActivityName=".BatteryConsumerPickerActivity"/>
    </application>
</manifest>
+17 −29
Original line number Diff line number Diff line
@@ -20,9 +20,7 @@ import android.content.Context;
import android.content.Intent;
import android.os.Bundle;

import androidx.activity.result.contract.ActivityResultContract;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentStatePagerAdapter;
@@ -32,31 +30,14 @@ import com.google.android.material.tabs.TabLayout;

/**
 * Picker, showing a sorted lists of applications and other types of entities consuming power.
 * Returns the selected entity ID or null.
 * Opens BatteryStatsViewerActivity upon item selection.
 */
public class BatteryConsumerPickerActivity extends FragmentActivity {

    public static final ActivityResultContract<Void, String> CONTRACT =
            new ActivityResultContract<Void, String>() {
                @NonNull
                @Override
                public Intent createIntent(@NonNull Context context, Void aVoid) {
                    return new Intent(context, BatteryConsumerPickerActivity.class);
                }

                @Override
                public String parseResult(int resultCode, @Nullable Intent intent) {
                    if (resultCode != RESULT_OK || intent == null) {
                        return null;
                    }
                    return intent.getStringExtra(Intent.EXTRA_RETURN_RESULT);
                }
            };
    private static final String PREF_SELECTED_BATTERY_CONSUMER = "batteryConsumerId";

    @Override
    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        getActionBar().setDisplayHomeAsUpEnabled(true);

        setContentView(R.layout.battery_consumer_picker_activity_layout);

@@ -99,18 +80,25 @@ public class BatteryConsumerPickerActivity extends FragmentActivity {
        viewPager.setAdapter(adapter);
        TabLayout tabLayout = findViewById(R.id.tab_layout);
        tabLayout.setupWithViewPager(viewPager);
        if (icicle == null) {
            final String batteryConsumerId = getPreferences(Context.MODE_PRIVATE)
                    .getString(PREF_SELECTED_BATTERY_CONSUMER, null);
            if (batteryConsumerId != null) {
                startBatteryStatsActivity(batteryConsumerId);
            }
        }
    }

    public void setSelectedBatteryConsumer(String batteryConsumerId) {
        Intent intent = new Intent();
        intent.putExtra(Intent.EXTRA_RETURN_RESULT, batteryConsumerId);
        setResult(RESULT_OK, intent);
        finish();
        getPreferences(Context.MODE_PRIVATE).edit()
                .putString(PREF_SELECTED_BATTERY_CONSUMER, batteryConsumerId)
                .apply();
        startBatteryStatsActivity(batteryConsumerId);
    }

    @Override
    public boolean onNavigateUp() {
        onBackPressed();
        return true;
    private void startBatteryStatsActivity(String batteryConsumerId) {
        final Intent intent = new Intent(this, BatteryStatsViewerActivity.class)
                .putExtra(BatteryStatsViewerActivity.EXTRA_BATTERY_CONSUMER, batteryConsumerId);
        startActivity(intent);
    }
}
+8 −36
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package com.android.frameworks.core.batterystatsviewer;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.BatteryStatsManager;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
@@ -27,9 +26,9 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.activity.ComponentActivity;
import androidx.activity.result.ActivityResultLauncher;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.loader.app.LoaderManager;
@@ -45,14 +44,14 @@ import java.util.List;
import java.util.Locale;

public class BatteryStatsViewerActivity extends ComponentActivity {
    public static final String EXTRA_BATTERY_CONSUMER = "batteryConsumerId";

    private static final int BATTERY_STATS_REFRESH_RATE_MILLIS = 60 * 1000;
    private static final int MILLIS_IN_MINUTE = 60000;
    private static final String PREF_SELECTED_BATTERY_CONSUMER = "batteryConsumerId";
    private static final int LOADER_BATTERY_USAGE_STATS = 1;

    private BatteryStatsDataAdapter mBatteryStatsDataAdapter;
    private final Runnable mBatteryStatsRefresh = this::periodicBatteryStatsRefresh;
    private SharedPreferences mSharedPref;
    private String mBatteryConsumerId;
    private TextView mTitleView;
    private TextView mDetailsView;
@@ -62,21 +61,16 @@ public class BatteryStatsViewerActivity extends ComponentActivity {
    private RecyclerView mBatteryConsumerDataView;
    private View mLoadingView;
    private View mEmptyView;
    private final ActivityResultLauncher<Void> mStartAppPicker = registerForActivityResult(
            BatteryConsumerPickerActivity.CONTRACT, this::onApplicationSelected);
    private List<BatteryUsageStats> mBatteryUsageStats;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mSharedPref = getPreferences(Context.MODE_PRIVATE);
        mBatteryConsumerId = getIntent().getStringExtra(EXTRA_BATTERY_CONSUMER);

        setContentView(R.layout.battery_stats_viewer_layout);

        View appCard = findViewById(R.id.app_card);
        appCard.setOnClickListener((e) -> startAppPicker());

        mTitleView = findViewById(android.R.id.title);
        mDetailsView = findViewById(R.id.details);
        mIconView = findViewById(android.R.id.icon);
@@ -91,11 +85,7 @@ public class BatteryStatsViewerActivity extends ComponentActivity {
        mLoadingView = findViewById(R.id.loading_view);
        mEmptyView = findViewById(R.id.empty_view);

        mBatteryConsumerId = mSharedPref.getString(PREF_SELECTED_BATTERY_CONSUMER, null);
        loadBatteryStats();
        if (mBatteryConsumerId == null) {
            startAppPicker();
        }
    }

    @Override
@@ -110,25 +100,6 @@ public class BatteryStatsViewerActivity extends ComponentActivity {
        getMainThreadHandler().removeCallbacks(mBatteryStatsRefresh);
    }

    private void startAppPicker() {
        mStartAppPicker.launch(null);
    }

    private void onApplicationSelected(String batteryConsumerId) {
        if (batteryConsumerId == null) {
            if (mBatteryConsumerId == null) {
                finish();
            }
        } else {
            mBatteryConsumerId = batteryConsumerId;
            mSharedPref.edit()
                    .putString(PREF_SELECTED_BATTERY_CONSUMER, mBatteryConsumerId)
                    .apply();
            mLoadingView.setVisibility(View.VISIBLE);
            loadBatteryStats();
        }
    }

    private void periodicBatteryStatsRefresh() {
        loadBatteryStats();
        getMainThreadHandler().postDelayed(mBatteryStatsRefresh, BATTERY_STATS_REFRESH_RATE_MILLIS);
@@ -200,9 +171,10 @@ public class BatteryStatsViewerActivity extends ComponentActivity {
        BatteryConsumerInfoHelper.BatteryConsumerInfo
                batteryConsumerInfo = batteryConsumerData.getBatteryConsumerInfo();
        if (batteryConsumerInfo == null) {
            mTitleView.setText("Battery consumer not found");
            mPackagesView.setVisibility(View.GONE);
            mHeadingsView.setVisibility(View.GONE);
            Toast.makeText(this, "Battery consumer not found: " + mBatteryConsumerId,
                    Toast.LENGTH_SHORT).show();
            finish();
            return;
        } else {
            mTitleView.setText(batteryConsumerInfo.label);
            if (batteryConsumerInfo.details != null) {