android message.java,Message.java

/*

* Copyright (C) 2016 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.documentsui.dirlist;

import android.annotation.Nullable;

import android.app.AuthenticationRequiredException;

import android.app.PendingIntent;

import android.graphics.drawable.Drawable;

import android.util.Log;

import com.android.documentsui.DocumentsApplication;

import com.android.documentsui.Model.Update;

import com.android.documentsui.R;

import com.android.documentsui.base.RootInfo;

import com.android.documentsui.base.Shared;

import com.android.documentsui.dirlist.DocumentsAdapter.Environment;

/**

* Data object used by {@link InflateMessageDocumentHolder} and {@link HeaderMessageDocumentHolder}.

*/

abstract class Message {

protected final Environment mEnv;

// If the message has a button, this will be the default button call back.

protected final Runnable mDefaultCallback;

// If a message has a new callback when updated, this field should be updated.

protected @Nullable Runnable mCallback;

private @Nullable CharSequence mMessageString;

private @Nullable CharSequence mButtonString;

private @Nullable Drawable mIcon;

private boolean mShouldShow = false;

Message(Environment env, Runnable defaultCallback) {

mEnv = env;

mDefaultCallback = defaultCallback;

}

abstract void update(Update Event);

protected void update(CharSequence messageString, CharSequence buttonString, Drawable icon) {

if (messageString == null) {

return;

}

mMessageString = messageString;

mButtonString = buttonString;

mIcon = icon;

mShouldShow = true;

}

void reset() {

mMessageString = null;

mIcon = null;

mShouldShow = false;

}

void runCallback() {

if (mCallback != null) {

mCallback.run();

} else {

mDefaultCallback.run();

}

}

Drawable getIcon() {

return mIcon;

}

boolean shouldShow() {

return mShouldShow;

}

CharSequence getMessageString() {

return mMessageString;

}

CharSequence getButtonString() {

return mButtonString;

}

final static class HeaderMessage extends Message {

private static final String TAG = "HeaderMessage";

HeaderMessage(Environment env, Runnable callback) {

super(env, callback);

}

@Override

void update(Update event) {

reset();

// Error gets first dibs ... for now

// TODO: These should be different Message objects getting updated instead of

// overwriting.

if (event.hasAuthenticationException()) {

updateToAuthenticationExceptionHeader(event);

} else if (mEnv.getModel().error != null) {

update(mEnv.getModel().error, null,

mEnv.getContext().getDrawable(R.drawable.ic_dialog_alert));

} else if (mEnv.getModel().info != null) {

update(mEnv.getModel().info, null,

mEnv.getContext().getDrawable(R.drawable.ic_dialog_info));

}

}

private void updateToAuthenticationExceptionHeader(Update event) {

assert(mEnv.getFeatures().isRemoteActionsEnabled());

RootInfo root = mEnv.getDisplayState().stack.getRoot();

String appName = DocumentsApplication

.getProvidersCache(mEnv.getContext()).getApplicationName(root.authority);

update(mEnv.getContext().getString(R.string.authentication_required, appName),

mEnv.getContext().getResources().getText(R.string.sign_in),

mEnv.getContext().getDrawable(R.drawable.ic_dialog_info));

mCallback = () -> {

AuthenticationRequiredException exception =

(AuthenticationRequiredException) event.getException();

mEnv.getActionHandler().startAuthentication(exception.getUserAction());

};

}

}

final static class InflateMessage extends Message {

InflateMessage(Environment env, Runnable callback) {

super(env, callback);

}

@Override

void update(Update event) {

reset();

if (event.hasException() && !event.hasAuthenticationException()) {

updateToInflatedErrorMesage(

Shared.DEBUG ? Shared.getStackTrace(event.getException()) : null);

} else if (event.hasAuthenticationException()) {

updateToCantDisplayContentMessage();

} else if (mEnv.getModel().getModelIds().length == 0) {

updateToInflatedEmptyMessage();

}

}

private void updateToInflatedErrorMesage(@Nullable String debugString) {

if (debugString == null) {

update(mEnv.getContext().getResources().getText(R.string.query_error), null,

mEnv.getContext().getDrawable(R.drawable.hourglass));

} else {

assert (Shared.DEBUG);

update(debugString, null, mEnv.getContext().getDrawable(R.drawable.hourglass));

}

}

private void updateToCantDisplayContentMessage() {

update(mEnv.getContext().getResources().getText(R.string.cant_display_content), null,

mEnv.getContext().getDrawable(R.drawable.cabinet));

}

private void updateToInflatedEmptyMessage() {

final CharSequence message;

if (mEnv.isInSearchMode()) {

message = String.format(

String.valueOf(

mEnv.getContext().getResources().getText(R.string.no_results)),

mEnv.getDisplayState().stack.getRoot().title);

} else {

message = mEnv.getContext().getResources().getText(R.string.empty);

}

update(message, null, mEnv.getContext().getDrawable(R.drawable.cabinet));

}

}

}

Java程序

|

185行

|

6.5 KB

/*

* Copyright (C) 2016 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.documentsui.dirlist;

import android.annotation.Nullable;

import android.app.AuthenticationRequiredException;

import android.app.PendingIntent;

import android.graphics.drawable.Drawable;

import android.util.Log;

import com.android.documentsui.DocumentsApplication;

import com.android.documentsui.Model.Update;

import com.android.documentsui.R;

import com.android.documentsui.base.RootInfo;

import com.android.documentsui.base.Shared;

import com.android.documentsui.dirlist.DocumentsAdapter.Environment;

/**

* Data object used by {@link InflateMessageDocumentHolder} and {@link HeaderMessageDocumentHolder}.

*/

abstract class Message {

protected final Environment mEnv;

// If the message has a button, this will be the default button call back.

protected final Runnable mDefaultCallback;

// If a message has a new callback when updated, this field should be updated.

protected @Nullable Runnable mCallback;

private @Nullable CharSequence mMessageString;

private @Nullable CharSequence mButtonString;

private @Nullable Drawable mIcon;

private boolean mShouldShow = false;

Message(Environment env, Runnable defaultCallback) {

mEnv = env;

mDefaultCallback = defaultCallback;

}

abstract void update(Update Event);

protected void update(CharSequence messageString, CharSequence buttonString, Drawable icon) {

if (messageString == null) {

return;

}

mMessageString = messageString;

mButtonString = buttonString;

mIcon = icon;

mShouldShow = true;

}

void reset() {

mMessageString = null;

mIcon = null;

mShouldShow = false;

}

void runCallback() {

if (mCallback != null) {

mCallback.run();

} else {

mDefaultCallback.run();

}

}

Drawable getIcon() {

return mIcon;

}

boolean shouldShow() {

return mShouldShow;

}

CharSequence getMessageString() {

return mMessageString;

}

CharSequence getButtonString() {

return mButtonString;

}

final static class HeaderMessage extends Message {

private static final String TAG = "HeaderMessage";

HeaderMessage(Environment env, Runnable callback) {

super(env, callback);

}

@Override

void update(Update event) {

reset();

// Error gets first dibs ... for now

// TODO: These should be different Message objects getting updated instead of

// overwriting.

if (event.hasAuthenticationException()) {

updateToAuthenticationExceptionHeader(event);

} else if (mEnv.getModel().error != null) {

update(mEnv.getModel().error, null,

mEnv.getContext().getDrawable(R.drawable.ic_dialog_alert));

} else if (mEnv.getModel().info != null) {

update(mEnv.getModel().info, null,

mEnv.getContext().getDrawable(R.drawable.ic_dialog_info));

}

}

private void updateToAuthenticationExceptionHeader(Update event) {

assert(mEnv.getFeatures().isRemoteActionsEnabled());

RootInfo root = mEnv.getDisplayState().stack.getRoot();

String appName = DocumentsApplication

.getProvidersCache(mEnv.getContext()).getApplicationName(root.authority);

update(mEnv.getContext().getString(R.string.authentication_required, appName),

mEnv.getContext().getResources().getText(R.string.sign_in),

mEnv.getContext().getDrawable(R.drawable.ic_dialog_info));

mCallback = () -> {

AuthenticationRequiredException exception =

(AuthenticationRequiredException) event.getException();

mEnv.getActionHandler().startAuthentication(exception.getUserAction());

};

}

}

final static class InflateMessage extends Message {

InflateMessage(Environment env, Runnable callback) {

super(env, callback);

}

@Override

void update(Update event) {

reset();

if (event.hasException() && !event.hasAuthenticationException()) {

updateToInflatedErrorMesage(

Shared.DEBUG ? Shared.getStackTrace(event.getException()) : null);

} else if (event.hasAuthenticationException()) {

updateToCantDisplayContentMessage();

} else if (mEnv.getModel().getModelIds().length == 0) {

updateToInflatedEmptyMessage();

}

}

private void updateToInflatedErrorMesage(@Nullable String debugString) {

if (debugString == null) {

update(mEnv.getContext().getResources().getText(R.string.query_error), null,

mEnv.getContext().getDrawable(R.drawable.hourglass));

} else {

assert (Shared.DEBUG);

update(debugString, null, mEnv.getContext().getDrawable(R.drawable.hourglass));

}

}

private void updateToCantDisplayContentMessage() {

update(mEnv.getContext().getResources().getText(R.string.cant_display_content), null,

mEnv.getContext().getDrawable(R.drawable.cabinet));

}

private void updateToInflatedEmptyMessage() {

final CharSequence message;

if (mEnv.isInSearchMode()) {

message = String.format(

String.valueOf(

mEnv.getContext().getResources().getText(R.string.no_results)),

mEnv.getDisplayState().stack.getRoot().title);

} else {

message = mEnv.getContext().getResources().getText(R.string.empty);

}

update(message, null, mEnv.getContext().getDrawable(R.drawable.cabinet));

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值