添加系统设置静音时的权限异常处理,添加固定的应用铃声音量设置。忽略其他应用设置的铃声音量。
This commit is contained in:
		@@ -18,13 +18,13 @@ def genVersionName(def versionName){
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
android {
 | 
					android {
 | 
				
			||||||
    compileSdkVersion 32
 | 
					    compileSdkVersion 30
 | 
				
			||||||
    buildToolsVersion "33.0.3"
 | 
					    buildToolsVersion "30.0.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    defaultConfig {
 | 
					    defaultConfig {
 | 
				
			||||||
        applicationId "cc.winboll.studio.contacts"
 | 
					        applicationId "cc.winboll.studio.contacts"
 | 
				
			||||||
        minSdkVersion 21
 | 
					        minSdkVersion 26
 | 
				
			||||||
        targetSdkVersion 30
 | 
					        targetSdkVersion 29
 | 
				
			||||||
        versionCode 1
 | 
					        versionCode 1
 | 
				
			||||||
        // versionName 更新后需要手动设置 
 | 
					        // versionName 更新后需要手动设置 
 | 
				
			||||||
        // 项目模块目录的 build.gradle 文件的 stageCount=0
 | 
					        // 项目模块目录的 build.gradle 文件的 stageCount=0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
#Created by .winboll/winboll_app_build.gradle
 | 
					#Created by .winboll/winboll_app_build.gradle
 | 
				
			||||||
#Tue Feb 25 00:17:29 HKT 2025
 | 
					#Tue Feb 25 19:32:36 GMT 2025
 | 
				
			||||||
stageCount=2
 | 
					stageCount=2
 | 
				
			||||||
libraryProject=
 | 
					libraryProject=
 | 
				
			||||||
baseVersion=1.0
 | 
					baseVersion=1.0
 | 
				
			||||||
publishVersion=1.0.1
 | 
					publishVersion=1.0.1
 | 
				
			||||||
buildCount=0
 | 
					buildCount=34
 | 
				
			||||||
baseBetaVersion=1.0.2
 | 
					baseBetaVersion=1.0.2
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,6 +26,8 @@ import cc.winboll.studio.libappbase.IWinBollActivity;
 | 
				
			|||||||
import cc.winboll.studio.libappbase.bean.APPInfo;
 | 
					import cc.winboll.studio.libappbase.bean.APPInfo;
 | 
				
			||||||
import com.hjq.toast.ToastUtils;
 | 
					import com.hjq.toast.ToastUtils;
 | 
				
			||||||
import java.lang.reflect.Field;
 | 
					import java.lang.reflect.Field;
 | 
				
			||||||
 | 
					import android.widget.SeekBar;
 | 
				
			||||||
 | 
					import android.widget.TextView;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class SettingsActivity extends AppCompatActivity implements IWinBollActivity {
 | 
					public class SettingsActivity extends AppCompatActivity implements IWinBollActivity {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -33,6 +35,11 @@ public class SettingsActivity extends AppCompatActivity implements IWinBollActiv
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    Toolbar mToolbar;
 | 
					    Toolbar mToolbar;
 | 
				
			||||||
    Switch swSilent;
 | 
					    Switch swSilent;
 | 
				
			||||||
 | 
					    SeekBar msbVolume;
 | 
				
			||||||
 | 
					    TextView mtvVolume;
 | 
				
			||||||
 | 
					    int mnStreamMaxVolume;
 | 
				
			||||||
 | 
					    int mnStreamVolume;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public APPInfo getAppInfo() {
 | 
					    public APPInfo getAppInfo() {
 | 
				
			||||||
@@ -77,6 +84,52 @@ public class SettingsActivity extends AppCompatActivity implements IWinBollActiv
 | 
				
			|||||||
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 | 
					            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        getSupportActionBar().setSubtitle(getTag());
 | 
					        getSupportActionBar().setSubtitle(getTag());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        msbVolume = findViewById(R.id.bellvolume);
 | 
				
			||||||
 | 
					        mtvVolume = findViewById(R.id.tv_volume);
 | 
				
			||||||
 | 
					        final AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 设置SeekBar的最大值为系统铃声音量的最大刻度
 | 
				
			||||||
 | 
					        mnStreamMaxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_RING);
 | 
				
			||||||
 | 
					        msbVolume.setMax(mnStreamMaxVolume);
 | 
				
			||||||
 | 
					        // 获取当前铃声音量并设置为SeekBar的初始进度
 | 
				
			||||||
 | 
					        mnStreamVolume = audioManager.getStreamVolume(AudioManager.STREAM_RING);
 | 
				
			||||||
 | 
					        msbVolume.setProgress(mnStreamVolume);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        updateStreamVolumeTextView();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        msbVolume.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
 | 
				
			||||||
 | 
					                @Override
 | 
				
			||||||
 | 
					                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
 | 
				
			||||||
 | 
					                    if (fromUser) {
 | 
				
			||||||
 | 
					                        // 设置铃声音量
 | 
				
			||||||
 | 
					                        audioManager.setStreamVolume(AudioManager.STREAM_RING, progress, 0);
 | 
				
			||||||
 | 
					                        RingTongBean bean = RingTongBean.loadBean(SettingsActivity.this, RingTongBean.class);
 | 
				
			||||||
 | 
					                        if (bean == null) {
 | 
				
			||||||
 | 
					                            bean = new RingTongBean();
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        bean.setStreamVolume(progress);
 | 
				
			||||||
 | 
					                        RingTongBean.saveBean(SettingsActivity.this, bean);
 | 
				
			||||||
 | 
					                        mnStreamVolume = progress;
 | 
				
			||||||
 | 
					                        updateStreamVolumeTextView();
 | 
				
			||||||
 | 
					                        //Toast.makeText(SettingsActivity.this, "音量设置为: " + progress, Toast.LENGTH_SHORT).show();
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                @Override
 | 
				
			||||||
 | 
					                public void onStartTrackingTouch(SeekBar seekBar) {
 | 
				
			||||||
 | 
					                    // 当开始拖动SeekBar时的操作
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                @Override
 | 
				
			||||||
 | 
					                public void onStopTrackingTouch(SeekBar seekBar) {
 | 
				
			||||||
 | 
					                    // 当停止拖动SeekBar时的操作
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void updateStreamVolumeTextView() {
 | 
				
			||||||
 | 
					        mtvVolume.setText(String.format("%d/%d", mnStreamVolume, mnStreamMaxVolume));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void onDefaultPhone(View view) {
 | 
					    public void onDefaultPhone(View view) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,23 +15,23 @@ public class RingTongBean extends BaseBean {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public static final String TAG = "AudioRingTongBean";
 | 
					    public static final String TAG = "AudioRingTongBean";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // 模式
 | 
					    // 铃声音量
 | 
				
			||||||
    int ringerMode;
 | 
					    int streamVolume;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    public RingTongBean() {
 | 
					    public RingTongBean() {
 | 
				
			||||||
        this.ringerMode = AudioManager.RINGER_MODE_NORMAL;
 | 
					        this.streamVolume = 100;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public RingTongBean(int ringerMode) {
 | 
					    public RingTongBean(int streamVolume) {
 | 
				
			||||||
        this.ringerMode = ringerMode;
 | 
					        this.streamVolume = streamVolume;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setRingerMode(int ringerMode) {
 | 
					    public void setStreamVolume(int streamVolume) {
 | 
				
			||||||
        this.ringerMode = ringerMode;
 | 
					        this.streamVolume = streamVolume;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public int getRingerMode() {
 | 
					    public int getStreamVolume() {
 | 
				
			||||||
        return ringerMode;
 | 
					        return streamVolume;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
@@ -42,15 +42,15 @@ public class RingTongBean extends BaseBean {
 | 
				
			|||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException {
 | 
					    public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException {
 | 
				
			||||||
        super.writeThisToJsonWriter(jsonWriter);
 | 
					        super.writeThisToJsonWriter(jsonWriter);
 | 
				
			||||||
        jsonWriter.name("ringerMode").value(getRingerMode());
 | 
					        jsonWriter.name("streamVolume").value(getStreamVolume());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException {
 | 
					    public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException {
 | 
				
			||||||
        if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else {
 | 
					        if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else {
 | 
				
			||||||
            if (name.equals("ringerMode")) {
 | 
					            if (name.equals("streamVolume")) {
 | 
				
			||||||
                setRingerMode(jsonReader.nextInt());
 | 
					                setStreamVolume(jsonReader.nextInt());
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                return false;
 | 
					                return false;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,8 +22,6 @@ public class PhoneCallService extends InCallService {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public static final String TAG = "PhoneCallService";
 | 
					    public static final String TAG = "PhoneCallService";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private volatile int originalRingVolume;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private final Call.Callback callback = new Call.Callback() {
 | 
					    private final Call.Callback callback = new Call.Callback() {
 | 
				
			||||||
        @Override
 | 
					        @Override
 | 
				
			||||||
        public void onStateChanged(Call call, int state) {
 | 
					        public void onStateChanged(Call call, int state) {
 | 
				
			||||||
@@ -61,39 +59,78 @@ public class PhoneCallService extends InCallService {
 | 
				
			|||||||
            String phoneNumber = details.getHandle().getSchemeSpecificPart();
 | 
					            String phoneNumber = details.getHandle().getSchemeSpecificPart();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // 记录原始铃声音量
 | 
					            // 记录原始铃声音量
 | 
				
			||||||
 | 
					            //
 | 
				
			||||||
            AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
 | 
					            AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
 | 
				
			||||||
            originalRingVolume = audioManager.getStreamVolume(AudioManager.STREAM_RING);
 | 
					
 | 
				
			||||||
 | 
					            // 恢复铃声音量,预防其他意外条件导致的音量变化问题
 | 
				
			||||||
 | 
					            //
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // 读取应用配置,未配置就初始化配置文件
 | 
				
			||||||
 | 
					            RingTongBean bean = RingTongBean.loadBean(this, RingTongBean.class);
 | 
				
			||||||
 | 
					            if (bean == null) {
 | 
				
			||||||
 | 
					                // 初始化配置
 | 
				
			||||||
 | 
					                bean = new RingTongBean();
 | 
				
			||||||
 | 
					                RingTongBean.saveBean(this, bean);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            // 如果当前音量和应用保存的不一致就恢复为应用设定值
 | 
				
			||||||
 | 
					            // 恢复铃声音量
 | 
				
			||||||
 | 
					            try {
 | 
				
			||||||
 | 
					                audioManager.setStreamVolume(AudioManager.STREAM_RING, bean.getStreamVolume(), 0);
 | 
				
			||||||
 | 
					                //audioManager.setMode(AudioManager.RINGER_MODE_NORMAL);
 | 
				
			||||||
 | 
					            } catch (java.lang.SecurityException e) {
 | 
				
			||||||
 | 
					                LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // 检查电话接收规则
 | 
					            // 检查电话接收规则
 | 
				
			||||||
            if (!Rules.getInstance(this).isAllowed(phoneNumber)) {
 | 
					            if (!Rules.getInstance(this).isAllowed(phoneNumber)) {
 | 
				
			||||||
                // 预先静音
 | 
					                // 调低音量
 | 
				
			||||||
                audioManager.setStreamVolume(AudioManager.STREAM_RING, 0, 0);
 | 
					                try {
 | 
				
			||||||
 | 
					                    audioManager.setStreamVolume(AudioManager.STREAM_RING, 0, 0);
 | 
				
			||||||
 | 
					                    //audioManager.setMode(AudioManager.RINGER_MODE_SILENT);
 | 
				
			||||||
 | 
					                } catch (java.lang.SecurityException e) {
 | 
				
			||||||
 | 
					                    LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
                // 断开电话
 | 
					                // 断开电话
 | 
				
			||||||
                call.disconnect();
 | 
					                call.disconnect();
 | 
				
			||||||
                // 停顿1秒,预防第一声铃声响动
 | 
					                // 停顿1秒,预防第一声铃声响动
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    Thread.sleep(1000);
 | 
					                    Thread.sleep(500);
 | 
				
			||||||
                } catch (InterruptedException e) {
 | 
					                } catch (InterruptedException e) {
 | 
				
			||||||
                    LogUtils.d(TAG, "");
 | 
					                    LogUtils.d(TAG, "");
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                // 恢复铃声音量
 | 
					                // 恢复铃声音量
 | 
				
			||||||
                audioManager.setStreamVolume(AudioManager.STREAM_RING, originalRingVolume, 0);
 | 
					                try {
 | 
				
			||||||
 | 
					                    audioManager.setStreamVolume(AudioManager.STREAM_RING, bean.getStreamVolume(), 0);
 | 
				
			||||||
 | 
					                    //audioManager.setMode(AudioManager.RINGER_MODE_NORMAL);
 | 
				
			||||||
 | 
					                } catch (java.lang.SecurityException e) {
 | 
				
			||||||
 | 
					                    LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
                // 屏蔽电话结束
 | 
					                // 屏蔽电话结束
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // 正常接听电话
 | 
					            // 正常接听电话
 | 
				
			||||||
            PhoneCallActivity.actionStart(this, phoneNumber, callType);
 | 
					            PhoneCallActivity.actionStart(this, phoneNumber, callType);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void resumeStreamVolume(AudioManager audioManager, int originalRingVolume) {
 | 
				
			||||||
 | 
					        // 如果当前音量和应用保存的不一致就恢复为应用设定值
 | 
				
			||||||
 | 
					        RingTongBean bean = RingTongBean.loadBean(this, RingTongBean.class);
 | 
				
			||||||
 | 
					        if (bean == null) {
 | 
				
			||||||
 | 
					            bean = new RingTongBean();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (originalRingVolume != bean.getStreamVolume()) {
 | 
				
			||||||
 | 
					            // 恢复铃声音量
 | 
				
			||||||
 | 
					            audioManager.setStreamVolume(AudioManager.STREAM_RING, bean.getStreamVolume(), 0);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void onCallRemoved(Call call) {
 | 
					    public void onCallRemoved(Call call) {
 | 
				
			||||||
        super.onCallRemoved(call);
 | 
					        super.onCallRemoved(call);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        call.unregisterCallback(callback);
 | 
					        call.unregisterCallback(callback);
 | 
				
			||||||
        PhoneCallManager.call = null;
 | 
					        PhoneCallManager.call = null;
 | 
				
			||||||
        AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
 | 
					 | 
				
			||||||
        // 恢复铃声音量
 | 
					 | 
				
			||||||
        audioManager.setStreamVolume(AudioManager.STREAM_RING, originalRingVolume, 0);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public enum CallType {
 | 
					    public enum CallType {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,13 +9,11 @@ import android.content.BroadcastReceiver;
 | 
				
			|||||||
import android.content.Context;
 | 
					import android.content.Context;
 | 
				
			||||||
import android.content.Intent;
 | 
					import android.content.Intent;
 | 
				
			||||||
import android.content.IntentFilter;
 | 
					import android.content.IntentFilter;
 | 
				
			||||||
import android.media.RingtoneManager;
 | 
					import android.media.AudioManager;
 | 
				
			||||||
import android.net.Uri;
 | 
					 | 
				
			||||||
import android.util.Log;
 | 
					 | 
				
			||||||
import cc.winboll.studio.contacts.services.MainService;
 | 
					import cc.winboll.studio.contacts.services.MainService;
 | 
				
			||||||
 | 
					import cc.winboll.studio.libappbase.LogUtils;
 | 
				
			||||||
import com.hjq.toast.ToastUtils;
 | 
					import com.hjq.toast.ToastUtils;
 | 
				
			||||||
import java.lang.ref.WeakReference;
 | 
					import java.lang.ref.WeakReference;
 | 
				
			||||||
import cc.winboll.studio.libappbase.LogUtils;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class MainReceiver extends BroadcastReceiver {
 | 
					public class MainReceiver extends BroadcastReceiver {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -43,7 +41,7 @@ public class MainReceiver extends BroadcastReceiver {
 | 
				
			|||||||
    public void registerAction(Context context) {
 | 
					    public void registerAction(Context context) {
 | 
				
			||||||
        IntentFilter filter=new IntentFilter();
 | 
					        IntentFilter filter=new IntentFilter();
 | 
				
			||||||
        filter.addAction(ACTION_BOOT_COMPLETED);
 | 
					        filter.addAction(ACTION_BOOT_COMPLETED);
 | 
				
			||||||
        //filter.addAction(Intent.ACTION_BATTERY_CHANGED);
 | 
					        //filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION);
 | 
				
			||||||
        context.registerReceiver(this, filter);
 | 
					        context.registerReceiver(this, filter);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,6 +45,32 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		</LinearLayout>
 | 
							</LinearLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<TextView
 | 
				
			||||||
 | 
								android:layout_width="wrap_content"
 | 
				
			||||||
 | 
								android:layout_height="wrap_content"
 | 
				
			||||||
 | 
								android:text="音量设置:"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<LinearLayout
 | 
				
			||||||
 | 
								android:orientation="horizontal"
 | 
				
			||||||
 | 
								android:layout_width="match_parent"
 | 
				
			||||||
 | 
								android:layout_height="wrap_content"
 | 
				
			||||||
 | 
								android:gravity="center_vertical">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<TextView
 | 
				
			||||||
 | 
									android:layout_width="wrap_content"
 | 
				
			||||||
 | 
									android:layout_height="wrap_content"
 | 
				
			||||||
 | 
									android:layout_marginLeft="10dp"
 | 
				
			||||||
 | 
									android:id="@+id/tv_volume"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<SeekBar
 | 
				
			||||||
 | 
									android:layout_width="match_parent"
 | 
				
			||||||
 | 
									android:layout_height="wrap_content"
 | 
				
			||||||
 | 
									android:layout_margin="10dp"
 | 
				
			||||||
 | 
									android:max="100"
 | 
				
			||||||
 | 
									android:id="@+id/bellvolume"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							</LinearLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	</LinearLayout>
 | 
						</LinearLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</LinearLayout>
 | 
					</LinearLayout>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user