mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 19:28:10 +00:00
Settings frequently crashes Bug: 126587956 Change-Id: Ied62d6f8783d8f0f9c434bdd8ee14c62d6cbc4c1
129 lines
4.2 KiB
Java
129 lines
4.2 KiB
Java
/*
|
|
* Copyright (C) 2017 The Android Open Source 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.android.launcher3.testcomponent;
|
|
|
|
import android.app.Activity;
|
|
import android.content.BroadcastReceiver;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.content.IntentFilter;
|
|
import android.graphics.Color;
|
|
import android.os.Bundle;
|
|
import android.util.TypedValue;
|
|
import android.view.View;
|
|
import android.widget.Button;
|
|
import android.widget.LinearLayout;
|
|
import android.widget.LinearLayout.LayoutParams;
|
|
|
|
import java.lang.reflect.Method;
|
|
import java.lang.reflect.Modifier;
|
|
|
|
/**
|
|
* Base activity with utility methods to help automate testing.
|
|
*/
|
|
public class BaseTestingActivity extends Activity implements View.OnClickListener {
|
|
|
|
public static final String SUFFIX_COMMAND = "-command";
|
|
public static final String EXTRA_METHOD = "method";
|
|
public static final String EXTRA_PARAM = "param_";
|
|
|
|
private static final int MARGIN_DP = 20;
|
|
|
|
private final String mAction = this.getClass().getName();
|
|
|
|
private LinearLayout mView;
|
|
private int mMargin;
|
|
|
|
private final BroadcastReceiver mCommandReceiver = new BroadcastReceiver() {
|
|
|
|
@Override
|
|
public void onReceive(Context context, Intent intent) {
|
|
handleCommand(intent);
|
|
}
|
|
};
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
|
|
mMargin = Math.round(TypedValue.applyDimension(
|
|
TypedValue.COMPLEX_UNIT_DIP, MARGIN_DP, getResources().getDisplayMetrics()));
|
|
mView = new LinearLayout(this);
|
|
mView.setPadding(mMargin, mMargin, mMargin, mMargin);
|
|
mView.setOrientation(LinearLayout.VERTICAL);
|
|
mView.setBackgroundColor(Color.BLUE);
|
|
setContentView(mView);
|
|
|
|
registerReceiver(mCommandReceiver, new IntentFilter(mAction + SUFFIX_COMMAND));
|
|
}
|
|
|
|
protected void addButton(String title, String method) {
|
|
Button button = new Button(this);
|
|
button.setText(title);
|
|
button.setTag(method);
|
|
button.setOnClickListener(this);
|
|
|
|
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
|
|
lp.bottomMargin = mMargin;
|
|
mView.addView(button, lp);
|
|
}
|
|
|
|
@Override
|
|
protected void onResume() {
|
|
super.onResume();
|
|
sendBroadcast(new Intent(mAction).putExtra(Intent.EXTRA_INTENT, getIntent()));
|
|
}
|
|
|
|
@Override
|
|
protected void onDestroy() {
|
|
unregisterReceiver(mCommandReceiver);
|
|
super.onDestroy();
|
|
}
|
|
|
|
@Override
|
|
public void onClick(View view) {
|
|
handleCommand(new Intent().putExtra(EXTRA_METHOD, (String) view.getTag()));
|
|
}
|
|
|
|
private void handleCommand(Intent cmd) {
|
|
String methodName = cmd.getStringExtra(EXTRA_METHOD);
|
|
try {
|
|
Method method = null;
|
|
for (Method m : this.getClass().getDeclaredMethods()) {
|
|
if (methodName.equals(m.getName()) &&
|
|
!Modifier.isStatic(m.getModifiers()) &&
|
|
Modifier.isPublic(m.getModifiers())) {
|
|
method = m;
|
|
break;
|
|
}
|
|
}
|
|
Object[] args = new Object[method.getParameterTypes().length];
|
|
Bundle extras = cmd.getExtras();
|
|
for (int i = 0; i < args.length; i++) {
|
|
args[i] = extras.get(EXTRA_PARAM + i);
|
|
}
|
|
method.invoke(this, args);
|
|
} catch (Exception e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
|
|
public static Intent getCommandIntent(Class<?> clazz, String method) {
|
|
return new Intent(clazz.getName() + SUFFIX_COMMAND)
|
|
.putExtra(EXTRA_METHOD, method);
|
|
}
|
|
}
|