提交 d999f6c1 编写于 作者: A Adam Barth 提交者: GitHub

Remove Activity service (#3136)

This functionality has been replaced by the PlatformPlugin. Also move the
contents of //flutter/services/common to more sensible homes.
上级 3bcf5848
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//mojo/public/tools/bindings/mojom.gni")
group("activity") {
public_deps = [
":interfaces",
]
if (is_android || is_ios) {
public_deps += [ ":activity_lib" ]
}
}
mojom("interfaces") {
sources = [
"activity.mojom",
]
}
if (is_android) {
import("//build/config/android/config.gni")
import("//build/config/android/rules.gni")
android_library("activity_lib") {
java_files = [
"src/org/domokit/activity/ActivityImpl.java",
]
deps = [
"//base:base_java",
"//mojo/public/java:bindings",
"//mojo/public/java:system",
":interfaces_java",
]
}
}
if (is_ios) {
source_set("activity_lib") {
sources = [
"ios/activity_impl.h",
"ios/activity_impl.mm",
]
deps = [
"//base:base",
"//mojo/public/cpp/application",
"//mojo/public/cpp/bindings:bindings",
"//flutter/services/activity:interfaces",
]
}
}
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
[DartPackage="sky_services"]
module activity;
struct StringExtra {
string name;
string value;
};
struct ComponentName {
string package_name;
string class_name;
};
struct Intent {
string action;
string url;
uint32 flags;
ComponentName? component;
array<StringExtra>? string_extras;
};
struct TaskDescription {
string? label;
uint32 primaryColor;
};
[ServiceName="activity::Activity"]
interface Activity {
StartActivity(Intent intent);
FinishCurrentActivity();
SetTaskDescription(TaskDescription description);
};
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_SERVICES_ACTIVITY_IOS_ACTIVITY_IMPL_H_
#define FLUTTER_SERVICES_ACTIVITY_IOS_ACTIVITY_IMPL_H_
#include "base/macros.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
#include "flutter/services/activity/activity.mojom.h"
namespace sky {
namespace services {
namespace activity {
class ActivityImpl : public ::activity::Activity {
public:
explicit ActivityImpl(mojo::InterfaceRequest<::activity::Activity> request);
~ActivityImpl() override;
// From activity::Activity:
void StartActivity(::activity::IntentPtr intent) override;
void FinishCurrentActivity() override;
void SetTaskDescription(::activity::TaskDescriptionPtr description) override;
private:
mojo::StrongBinding<::activity::Activity> binding_;
DISALLOW_COPY_AND_ASSIGN(ActivityImpl);
};
} // namespace activity
} // namespace services
} // namespace sky
#endif // FLUTTER_SERVICES_ACTIVITY_IOS_ACTIVITY_IMPL_H_
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/logging.h"
#include "base/mac/scoped_nsautorelease_pool.h"
#include "flutter/services/activity/ios/activity_impl.h"
#include <UIKit/UIKit.h>
namespace sky {
namespace services {
namespace activity {
ActivityImpl::ActivityImpl(mojo::InterfaceRequest<::activity::Activity> request)
: binding_(this, request.Pass()) {}
ActivityImpl::~ActivityImpl() {}
void ActivityImpl::StartActivity(::activity::IntentPtr intent) {
CHECK(false) << "Cannot start activities on iOS";
}
void ActivityImpl::FinishCurrentActivity() {
CHECK(false) << "Cannot finish activities on iOS";
}
void ActivityImpl::SetTaskDescription(
::activity::TaskDescriptionPtr description) {
// No counterpart on iOS but is a benign operation. So no asserts.
}
} // namespace activity
} // namespace services
} // namespace sky
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.domokit.activity;
import android.content.ActivityNotFoundException;
import android.content.pm.ActivityInfo;
import android.net.Uri;
import android.os.Build;
import android.util.Log;
import android.view.View;
import org.chromium.mojo.bindings.InterfaceRequest;
import org.chromium.mojo.system.MojoException;
import org.chromium.mojom.activity.Activity;
import org.chromium.mojom.activity.ComponentName;
import org.chromium.mojom.activity.Intent;
import org.chromium.mojom.activity.StringExtra;
import org.chromium.mojom.activity.TaskDescription;
/**
* Android implementation of Activity.
*/
public class ActivityImpl implements Activity {
private static final String TAG = "ActivityImpl";
private static android.app.Activity sCurrentActivity;
public ActivityImpl() {
}
public static void setCurrentActivity(android.app.Activity activity) {
sCurrentActivity = activity;
}
public static android.app.Activity getCurrentActivity() {
return sCurrentActivity;
}
@Override
public void close() {}
@Override
public void onConnectionError(MojoException e) {}
@Override
public void startActivity(Intent intent) {
if (sCurrentActivity == null) {
Log.e(TAG, "Unable to startActivity");
return;
}
final android.content.Intent androidIntent = new android.content.Intent(
intent.action, Uri.parse(intent.url));
if (intent.component != null) {
ComponentName component = intent.component;
android.content.ComponentName androidComponent =
new android.content.ComponentName(component.packageName, component.className);
androidIntent.setComponent(androidComponent);
}
if (intent.stringExtras != null) {
for (StringExtra extra : intent.stringExtras) {
androidIntent.putExtra(extra.name, extra.value);
}
}
if (intent.flags != 0) {
androidIntent.setFlags(intent.flags);
}
try {
sCurrentActivity.startActivity(androidIntent);
} catch (ActivityNotFoundException e) {
Log.e(TAG, "Unable to startActivity", e);
}
}
@Override
public void finishCurrentActivity() {
if (sCurrentActivity != null) {
sCurrentActivity.finish();
} else {
Log.e(TAG, "Unable to finishCurrentActivity");
}
}
@Override
public void setTaskDescription(TaskDescription description) {
if (sCurrentActivity == null) {
return;
}
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
return;
}
int color = description.primaryColor;
if (color != 0) // 0 means color isn't set, use system default
color = color | 0xFF000000; // color must be opaque if set
sCurrentActivity.setTaskDescription(
new android.app.ActivityManager.TaskDescription(
description.label,
null,
color
)
);
}
}
if (is_android) {
import("//build/config/android/config.gni")
import("//build/config/android/rules.gni")
android_library("common_lib") {
java_files = [
"src/org/domokit/common/ActivityLifecycleListener.java",
"src/org/domokit/common/ResourcePaths.java",
]
}
}
......@@ -64,6 +64,7 @@ android_library("java") {
visibility = [ ":*" ]
java_files = [
"io/flutter/plugin/common/ActivityLifecycleListener.java",
"io/flutter/plugin/common/JSONMessageListener.java",
"io/flutter/plugin/platform/PlatformPlugin.java",
"io/flutter/view/AccessibilityBridge.java",
......@@ -71,6 +72,7 @@ android_library("java") {
"io/flutter/view/FlutterView.java",
"io/flutter/view/ResourceCleaner.java",
"io/flutter/view/ResourceExtractor.java",
"io/flutter/view/ResourcePaths.java",
"io/flutter/view/ServiceFactory.java",
"io/flutter/view/ServiceProviderImpl.java",
"io/flutter/view/ServiceRegistry.java",
......@@ -80,9 +82,6 @@ android_library("java") {
deps = [
"//base:base_java",
"//flutter/services/activity:activity_lib",
"//flutter/services/activity:interfaces_java",
"//flutter/services/common:common_lib",
"//flutter/services/editing:editing_lib",
"//flutter/services/editing:interfaces_java",
"//flutter/services/engine:interfaces_java",
......
......@@ -2,9 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.domokit.common;
package io.flutter.plugin.common;
// TODO(abarth): Move to io.flutter.plugin.common.
public interface ActivityLifecycleListener {
void onPostResume();
}
......@@ -12,10 +12,10 @@ import android.os.Build;
import android.view.HapticFeedbackConstants;
import android.view.SoundEffectConstants;
import android.view.View;
import io.flutter.plugin.common.ActivityLifecycleListener;
import io.flutter.plugin.common.JSONMessageListener;
import io.flutter.view.FlutterView;
import org.chromium.base.PathUtils;
import org.domokit.common.ActivityLifecycleListener;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
......
......@@ -34,10 +34,8 @@ import org.chromium.mojo.bindings.Interface.Binding;
import org.chromium.mojo.system.Core;
import org.chromium.mojo.system.impl.CoreImpl;
import org.chromium.mojo.system.MessagePipeHandle;
import org.chromium.mojom.activity.Activity;
import org.chromium.mojom.editing.Clipboard;
import org.chromium.mojom.vsync.VSyncProvider;
import org.domokit.activity.ActivityImpl;
import org.domokit.editing.ClipboardImpl;
import org.domokit.vsync.VSyncProviderImpl;
......@@ -184,13 +182,6 @@ public class FlutterMain {
private static native void nativeRecordStartTimestamp(long initTimeMillis);
private static void onServiceRegistryAvailable(final Context applicationContext, ServiceRegistry registry) {
registry.register(Activity.MANAGER.getName(), new ServiceFactory() {
@Override
public Binding connectToService(FlutterView view, Core core, MessagePipeHandle pipe) {
return Activity.MANAGER.bind(new ActivityImpl(), pipe);
}
});
registry.register(Clipboard.MANAGER.getName(), new ServiceFactory() {
@Override
public Binding connectToService(FlutterView view, Core core, MessagePipeHandle pipe) {
......
......@@ -60,10 +60,9 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import io.flutter.plugin.common.ActivityLifecycleListener;
import io.flutter.plugin.platform.PlatformPlugin;
import org.domokit.common.ActivityLifecycleListener;
import org.domokit.activity.ActivityImpl;
import org.domokit.editing.KeyboardImpl;
import org.domokit.editing.KeyboardViewState;
import org.domokit.raw_keyboard.RawKeyboardServiceImpl;
......@@ -105,10 +104,6 @@ public class FlutterView extends SurfaceView
public FlutterView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO(abarth): Remove this static and instead make everything that
// depends on it into a view-associated service.
ActivityImpl.setCurrentActivity((Activity) context);
mMetrics = new ViewportMetrics();
mMetrics.devicePixelRatio = context.getResources().getDisplayMetrics().density;
setFocusable(true);
......
......@@ -13,8 +13,6 @@ import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import org.domokit.common.ResourcePaths;
/**
* A class to clean up orphaned resource directories after unclean shutdowns.
**/
......
......@@ -2,14 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.domokit.common;
package io.flutter.view;
import android.content.Context;
import java.io.File;
import java.io.IOException;
public class ResourcePaths {
class ResourcePaths {
// The filename prefix used by Chromium temporary file APIs.
public static final String TEMPORARY_RESOURCE_PREFIX = ".org.chromium.Chromium.";
......
......@@ -21,7 +21,6 @@ source_set("common") {
"//base:i18n",
"//dart/runtime:libdart",
"//flutter/runtime",
"//flutter/services/activity",
"//flutter/services/editing",
"//flutter/services/engine:interfaces",
"//flutter/services/platform",
......
......@@ -5,7 +5,6 @@
#include "flutter/shell/platform/darwin/common/platform_service_provider.h"
#if TARGET_OS_IPHONE
#include "flutter/services/activity/ios/activity_impl.h"
#include "flutter/services/editing/ios/clipboard_impl.h"
#include "flutter/services/vsync/ios/vsync_provider_ios_impl.h"
#else
......@@ -24,11 +23,6 @@ void PlatformServiceProvider::ConnectToService(
const mojo::String& service_name,
mojo::ScopedMessagePipeHandle client_handle) {
#if TARGET_OS_IPHONE
if (service_name == ::activity::Activity::Name_) {
new sky::services::activity::ActivityImpl(
mojo::InterfaceRequest<::activity::Activity>(client_handle.Pass()));
return;
}
if (service_name == ::editing::Clipboard::Name_) {
new sky::services::editing::ClipboardImpl(
mojo::InterfaceRequest<::editing::Clipboard>(client_handle.Pass()));
......
......@@ -49,7 +49,6 @@ shared_library("flutter_framework_dylib") {
"//base:base",
"//dart/runtime:libdart",
"//flutter/lib/ui",
"//flutter/services/activity",
"//flutter/services/editing",
"//flutter/services/engine:interfaces",
"//flutter/services/platform",
......
......@@ -16,8 +16,4 @@ group("sky") {
if (dart_host_toolchain == host_toolchain) {
deps += [ "//flutter/snapshotter($dart_host_toolchain)" ]
}
if (is_android) {
deps += [ "//flutter/services/activity" ]
}
}
/// Copyright 2016 The Chromium Authors. All rights reserved.
/// Use of this source code is governed by a BSD-style license that can be
/// found in the LICENSE file.
import 'package:sky_services/activity/activity.mojom.dart';
export 'package:sky_services/activity/activity.mojom.dart';
......@@ -23,7 +23,6 @@ dart_pkg("sky_services") {
deps = [
":copy_sky_services_license",
"//flutter/services/activity:interfaces",
"//flutter/services/editing:interfaces",
"//flutter/services/platform:interfaces",
"//flutter/services/raw_keyboard:interfaces",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册