upload android base code part7

This commit is contained in:
August 2018-08-08 18:09:17 +08:00
parent 4e516ec6ed
commit 841ae54672
25229 changed files with 1709508 additions and 0 deletions

View file

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2014 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.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.google.wearable.app" >
<uses-sdk android:minSdkVersion="20"
android:targetSdkVersion="22" />
<uses-feature android:name="android.hardware.type.watch" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.DeviceDefault">
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="com.google.android.clockwork.example.SKELETON"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity
android:name=".GridExampleActivity">
<intent-filter>
<action android:name="com.example.android.google.wearable.app.GRID_ACTIVITY"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
</application>
</manifest>

View file

@ -0,0 +1,13 @@
page.tags="SkeletonWearableApp"
sample.group=Wearable
@jd:body
<p>
This sample is a mostly empty wearable app that implements a fullscreen activity
conforming to Android Wear best practices. Included in the sample are examples of GridViewPager,
DelayedConfirmationView, and DismissOverlayView. Developers who require a fullscreen activity for
their wearable app can use this sample as a starting point.
</p>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2014 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.
-->
<android.support.wearable.view.GridViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />

View file

@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2014 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.
-->
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:id="@+id/scroll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="#000000"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="2dp"
android:text="@string/main_activity_title_text"
android:textSize="36sp"
android:textColor="#006600"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showNotification"
android:text="@string/show_notification" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onFinishActivity"
android:text="@string/finish_activity" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/start_timer_button"
android:onClick="onStartTimer"
android:text="@string/start_timer" />
<android.support.wearable.view.DelayedConfirmationView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/timer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_launcher"
app:circle_color="@color/blue"
app:circle_padding="@dimen/circle_padding"
app:circle_border_width="@dimen/circle_border_normal_width"
app:circle_border_color="@color/white"
app:circle_radius="@dimen/circle_radius"/>
</LinearLayout>
</ScrollView>
<android.support.wearable.view.DismissOverlayView
android:id="@+id/dismiss_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2014 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.
-->
<resources>
<dimen name="circle_border_normal_width">10dp</dimen>
<dimen name="circle_padding">5dp</dimen>
<dimen name="circle_radius">50dp</dimen>
</resources>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2014 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.
-->
<resources>
<string name="app_name">Skeleton Wearable App</string>
<string name="intro_text">Long press to go back home.</string>
<string name="main_activity_title_text"> Main Activity </string>
<string name="grid_activity_title_text"> Grid Activity </string>
<string name="finish_activity"> Finish Activity </string>
<string name="start_timer"> Start Timer (5 sec) </string>
<string name="show_notification"> Show Notification </string>
<string name="notification_title"> Skeleton App Notification </string>
<string name="action_launch_activity">Launch Activity</string>
</resources>

View file

@ -0,0 +1,115 @@
/*
* Copyright (C) 2014 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.example.android.google.wearable.app;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Typeface;
import android.graphics.Paint.Align;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.wearable.view.CardFragment;
import android.support.wearable.view.FragmentGridPagerAdapter;
import android.support.wearable.view.GridViewPager;
import java.util.HashMap;
import java.util.Map;
public class GridExampleActivity extends Activity {
private static final int NUM_ROWS = 10;
private static final int NUM_COLS = 3;
MainAdapter mAdapter;
GridViewPager mPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grid_activity);
mPager = (GridViewPager) findViewById(R.id.fragment_container);
mAdapter = new MainAdapter(this, getFragmentManager());
mPager.setAdapter(mAdapter);
}
private static class MainAdapter extends FragmentGridPagerAdapter{
Map<Point, Drawable> mBackgrounds = new HashMap<Point, Drawable>();
private Context mContext;
public MainAdapter(Context ctx, FragmentManager fm) {
super(fm);
mContext = ctx;
}
@Override
public int getRowCount() {
return NUM_ROWS;
}
@Override
public int getColumnCount(int rowNum) {
return NUM_COLS;
}
@Override
public Fragment getFragment(int rowNum, int colNum) {
return MainFragment.newInstance(rowNum, colNum);
}
@Override
public Drawable getBackgroundForPage(int row, int column) {
Point pt = new Point(column, row);
Drawable drawable = mBackgrounds.get(pt);
if (drawable == null) {
Bitmap bm = Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bm);
Paint p = new Paint();
// Clear previous image.
c.drawRect(0, 0, 200, 200, p);
p.setAntiAlias(true);
p.setTypeface(Typeface.DEFAULT);
p.setTextSize(64);
p.setColor(Color.LTGRAY);
p.setTextAlign(Align.CENTER);
c.drawText(column+ "-" + row, 100, 100, p);
drawable = new BitmapDrawable(mContext.getResources(), bm);
mBackgrounds.put(pt, drawable);
}
return drawable;
}
}
public static class MainFragment extends CardFragment {
private static MainFragment newInstance(int rowNum, int colNum) {
Bundle args = new Bundle();
args.putString(CardFragment.KEY_TITLE, "Row:" + rowNum);
args.putString(CardFragment.KEY_TEXT, "Col:" + colNum);
MainFragment f = new MainFragment();
f.setArguments(args);
return f;
}
}
}

View file

@ -0,0 +1,129 @@
/*
* Copyright (C) 2014 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.example.android.google.wearable.app;
import android.app.Activity;
import android.app.Notification;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationManagerCompat;
import android.support.v4.view.GestureDetectorCompat;
import android.support.wearable.view.DelayedConfirmationView;
import android.support.wearable.view.DismissOverlayView;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ScrollView;
public class MainActivity extends Activity
implements DelayedConfirmationView.DelayedConfirmationListener {
private static final String TAG = "MainActivity";
private static final int NOTIFICATION_ID = 1;
private static final int NOTIFICATION_REQUEST_CODE = 1;
private static final int NUM_SECONDS = 5;
private GestureDetectorCompat mGestureDetector;
private DismissOverlayView mDismissOverlayView;
@Override
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.main_activity);
mDismissOverlayView = (DismissOverlayView) findViewById(R.id.dismiss_overlay);
mDismissOverlayView.setIntroText(R.string.intro_text);
mDismissOverlayView.showIntroIfNecessary();
mGestureDetector = new GestureDetectorCompat(this, new LongPressListener());
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
return mGestureDetector.onTouchEvent(event) || super.dispatchTouchEvent(event);
}
private class LongPressListener extends GestureDetector.SimpleOnGestureListener {
@Override
public void onLongPress(MotionEvent event) {
mDismissOverlayView.show();
}
}
/**
* Handles the button to launch a notification.
*/
public void showNotification(View view) {
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle(getString(R.string.notification_title))
.setContentText(getString(R.string.notification_title))
.setSmallIcon(R.drawable.ic_launcher)
.addAction(R.drawable.ic_launcher,
getText(R.string.action_launch_activity),
PendingIntent.getActivity(this, NOTIFICATION_REQUEST_CODE,
new Intent(this, GridExampleActivity.class),
PendingIntent.FLAG_UPDATE_CURRENT))
.build();
NotificationManagerCompat.from(this).notify(NOTIFICATION_ID, notification);
finish();
}
/**
* Handles the button press to finish this activity and take the user back to the Home.
*/
public void onFinishActivity(View view) {
setResult(RESULT_OK);
finish();
}
/**
* Handles the button to start a DelayedConfirmationView timer.
*/
public void onStartTimer(View view) {
DelayedConfirmationView delayedConfirmationView = (DelayedConfirmationView)
findViewById(R.id.timer);
delayedConfirmationView.setTotalTimeMs(NUM_SECONDS * 1000);
delayedConfirmationView.setListener(this);
delayedConfirmationView.start();
scroll(View.FOCUS_DOWN);
}
@Override
public void onTimerFinished(View v) {
Log.d(TAG, "onTimerFinished is called.");
scroll(View.FOCUS_UP);
}
@Override
public void onTimerSelected(View v) {
Log.d(TAG, "onTimerSelected is called.");
scroll(View.FOCUS_UP);
}
private void scroll(final int scrollDirection) {
final ScrollView scrollView = (ScrollView) findViewById(R.id.scroll);
scrollView.post(new Runnable() {
@Override
public void run() {
scrollView.fullScroll(scrollDirection);
}
});
}
}