summaryrefslogtreecommitdiff
path: root/tests/TaskOrganizerTest
diff options
context:
space:
mode:
Diffstat (limited to 'tests/TaskOrganizerTest')
-rw-r--r--tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerMultiWindowTest.java135
-rw-r--r--tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerPipTest.java7
-rw-r--r--tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskView.java23
3 files changed, 149 insertions, 16 deletions
diff --git a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerMultiWindowTest.java b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerMultiWindowTest.java
index 3fb0050d0c55..8f7bebb8a9e4 100644
--- a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerMultiWindowTest.java
+++ b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerMultiWindowTest.java
@@ -19,41 +19,135 @@ package com.android.test.taskembed;
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
import android.app.ActivityManager;
+import android.app.ActivityTaskManager;
import android.app.Activity;
import android.app.ActivityOptions;
import android.content.Context;
import android.content.Intent;
+import android.graphics.Color;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.RemoteException;
+import android.view.Gravity;
import android.view.ITaskOrganizer;
import android.view.IWindowContainer;
+import android.view.MotionEvent;
import android.view.SurfaceControl;
import android.view.SurfaceHolder;
+import android.view.View;
import android.view.ViewGroup;
+import android.view.WindowContainerTransaction;
import android.widget.FrameLayout;
+import android.widget.LinearLayout;
public class TaskOrganizerMultiWindowTest extends Activity {
- class TaskLaunchingView extends TaskView {
- TaskLaunchingView(Context c, ITaskOrganizer o, int windowingMode) {
+ class SplitLayout extends LinearLayout implements View.OnTouchListener {
+ View mView1;
+ View mView2;
+ View mDividerView;
+
+ public boolean onTouch(View v, MotionEvent e) {
+ if (e.getAction() != MotionEvent.ACTION_UP) {
+ return true;
+ }
+
+ float x = e.getX(0);
+ float ratio = (float) x / (float) getWidth() ;
+
+ LinearLayout.LayoutParams lp1 =
+ new LinearLayout.LayoutParams(0,
+ ViewGroup.LayoutParams.WRAP_CONTENT, ratio-0.02f);
+ LinearLayout.LayoutParams lp2 =
+ new LinearLayout.LayoutParams(0,
+ ViewGroup.LayoutParams.WRAP_CONTENT, 1-ratio-0.02f);
+ updateViewLayout(mView1, lp2);
+ updateViewLayout(mView2, lp1);
+ return true;
+ }
+
+ SplitLayout(Context c, View v1, View v2) {
+ super(c);
+ LinearLayout.LayoutParams lp1 =
+ new LinearLayout.LayoutParams(0,
+ ViewGroup.LayoutParams.WRAP_CONTENT, 0.48f);
+ LinearLayout.LayoutParams lp3 =
+ new LinearLayout.LayoutParams(0,
+ ViewGroup.LayoutParams.WRAP_CONTENT, 0.48f);
+ LinearLayout.LayoutParams lp2 =
+ new LinearLayout.LayoutParams(0,
+ ViewGroup.LayoutParams.FILL_PARENT, 0.04f);
+ lp2.gravity = Gravity.CENTER;
+
+ setWeightSum(1);
+
+ mView1 = v1;
+ mView2 = v2;
+ addView(mView1, lp1);
+
+ mDividerView = new View(getContext());
+ mDividerView.setBackgroundColor(Color.BLACK);
+ addView(mDividerView, lp2);
+ mDividerView.setOnTouchListener(this);
+
+ addView(mView2, lp3);
+ }
+ }
+
+ class ResizingTaskView extends TaskView {
+ final Intent mIntent;
+ boolean launched = false;
+ ResizingTaskView(Context c, ITaskOrganizer o, int windowingMode, Intent i) {
super(c, o, windowingMode);
+ mIntent = i;
}
@Override
public void surfaceChanged(SurfaceHolder h, int format, int width, int height) {
- startCalculatorActivity(width, height);
+ if (!launched) {
+ launchOrganizedActivity(mIntent, width, height);
+ launched = true;
+ } else {
+ resizeTask(width, height);
+ }
+ }
+
+ void resizeTask(int width, int height) {
+ final WindowContainerTransaction wct = new WindowContainerTransaction();
+ wct.setBounds(mWc, new Rect(0, 0, width, height));
+ try {
+ ActivityTaskManager.getTaskOrganizerController().applyContainerTransaction(wct,
+ mOrganizer);
+ } catch (Exception e) {
+ // Oh well
+ }
}
}
- TaskView mView;
+
+ TaskView mTaskView1;
+ TaskView mTaskView2;
+ boolean gotFirstTask = false;
class Organizer extends ITaskOrganizer.Stub {
+ private int receivedTransactions = 0;
+ SurfaceControl.Transaction mergedTransaction = new SurfaceControl.Transaction();
@Override
public void taskAppeared(ActivityManager.RunningTaskInfo ti) {
- mView.reparentTask(ti.token);
+ if (!gotFirstTask) {
+ mTaskView1.reparentTask(ti.token);
+ gotFirstTask = true;
+ } else {
+ mTaskView2.reparentTask(ti.token);
+ }
}
public void taskVanished(IWindowContainer wc) {
}
public void transactionReady(int id, SurfaceControl.Transaction t) {
+ mergedTransaction.merge(t);
+ receivedTransactions++;
+ if (receivedTransactions == 2) {
+ mergedTransaction.apply();
+ receivedTransactions = 0;
+ }
}
@Override
public void onTaskInfoChanged(ActivityManager.RunningTaskInfo info) {
@@ -66,14 +160,33 @@ public class TaskOrganizerMultiWindowTest extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- mView = new TaskLaunchingView(this, mOrganizer, WINDOWING_MODE_MULTI_WINDOW);
- setContentView(mView);
+ try {
+ ActivityTaskManager.getTaskOrganizerController().registerTaskOrganizer(mOrganizer,
+ WINDOWING_MODE_MULTI_WINDOW);
+
+ } catch (Exception e) {
+ }
+
+ mTaskView1 = new ResizingTaskView(this, mOrganizer, WINDOWING_MODE_MULTI_WINDOW,
+ makeSettingsIntent());
+ mTaskView2 = new ResizingTaskView(this, mOrganizer, WINDOWING_MODE_MULTI_WINDOW,
+ makeContactsIntent());
+ View splitView = new SplitLayout(this, mTaskView1, mTaskView2);
+
+ setContentView(splitView);
+ }
+
+ Intent makeSettingsIntent() {
+ Intent intent = new Intent();
+ intent.setAction(android.provider.Settings.ACTION_SETTINGS);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ return intent;
}
- Intent makeCalculatorIntent() {
+ Intent makeContactsIntent() {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
- intent.addCategory(Intent.CATEGORY_APP_CALCULATOR);
+ intent.addCategory(Intent.CATEGORY_APP_CONTACTS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
return intent;
}
@@ -85,7 +198,7 @@ public class TaskOrganizerMultiWindowTest extends Activity {
return o.toBundle();
}
- void startCalculatorActivity(int width, int height) {
- startActivity(makeCalculatorIntent(), makeLaunchOptions(width, height));
+ void launchOrganizedActivity(Intent i, int width, int height) {
+ startActivity(i, makeLaunchOptions(width, height));
}
}
diff --git a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerPipTest.java b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerPipTest.java
index bdfaaa8f11ea..bd17751f183e 100644
--- a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerPipTest.java
+++ b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskOrganizerPipTest.java
@@ -68,6 +68,13 @@ public class TaskOrganizerPipTest extends Service {
public void onCreate() {
super.onCreate();
+ try {
+ ActivityTaskManager.getTaskOrganizerController().registerTaskOrganizer(mOrganizer,
+ WINDOWING_MODE_PINNED);
+
+ } catch (Exception e) {
+ }
+
final WindowManager.LayoutParams wlp = new WindowManager.LayoutParams();
wlp.setTitle("TaskOrganizerPipTest");
wlp.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
diff --git a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskView.java b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskView.java
index 9f32bb8a0bf7..0086fb7d92e9 100644
--- a/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskView.java
+++ b/tests/TaskOrganizerTest/src/com/android/test/taskembed/TaskView.java
@@ -31,6 +31,10 @@ import android.view.SurfaceView;
class TaskView extends SurfaceView implements SurfaceHolder.Callback {
final ITaskOrganizer mTaskOrganizer;
final int mWindowingMode;
+ IWindowContainer mWc;
+
+ boolean mSurfaceCreated = false;
+ boolean mNeedsReparent;
TaskView(Context c, ITaskOrganizer o, int windowingMode) {
super(c);
@@ -43,10 +47,10 @@ class TaskView extends SurfaceView implements SurfaceHolder.Callback {
@Override
public void surfaceCreated(SurfaceHolder holder) {
- try {
- ActivityTaskManager.getTaskOrganizerController().registerTaskOrganizer(mTaskOrganizer,
- mWindowingMode);
- } catch (Exception e) {
+ mSurfaceCreated = true;
+ if (mNeedsReparent) {
+ mNeedsReparent = false;
+ reparentLeash();
}
}
@@ -59,10 +63,19 @@ class TaskView extends SurfaceView implements SurfaceHolder.Callback {
}
void reparentTask(IWindowContainer wc) {
+ mWc = wc;
+ if (mSurfaceCreated == false) {
+ mNeedsReparent = true;
+ } else {
+ reparentLeash();
+ }
+ }
+
+ void reparentLeash() {
SurfaceControl.Transaction t = new SurfaceControl.Transaction();
SurfaceControl leash = null;
try {
- leash = wc.getLeash();
+ leash = mWc.getLeash();
} catch (Exception e) {
// System server died.. oh well
}